Android 의 windowSoftInputMode 속성 상세 설명

앞의 글 에서 소프트 키보드 가 자동 으로 꺼 지지 않 는 방법 을 간단하게 소개 하 였 으 며,사용 하 는 방법 은 안 드 로 이 드:windowSoftInputMode 속성 을 설정 하 는 것 입 니 다.그렇다면 이 속성 은 도대체 무엇 을 하 는 것 일 까?그 는 어떤 역할 을 하 는 것 일 까?오늘 이 글 은 안 드 로 이 드:windowSoftInputMode 속성 을 탐색 하 는 역할 입 니 다.
    먼저,우 리 는 이 속성의 이름 에서 그의 역할 을 직관 적 으로 볼 수 있다.이 속성 은 바로 창 소프트 키보드 의 상호작용 모델 을 설정 하 는 것 이다.
    android:windowSoftInputMode 속성 은 모두 9 개의 수치 가 있 습 니 다.각각:
    stateUnspecified,stateUnchanged,stateHidden,stateAlwaysHidden,stateVisible,stateAlwaysVisible,adjustUnspecified,adjustResize,adjustPan。
    속성 을 설정 할 때 이 9 개의 값 중 하 나 를 선택 할 수도 있 고,"state...|adult"형식 으로 설정 할 수도 있 습 니 다.그렇다면 이런 수 치 는 도대체 소프트 키보드 와 창 간 의 상호작용 에 어떻게 영향 을 줍 니까?다음은 소프트 키보드 의 디 스 플레이 에 어떻게 영향 을 미 치 는 지 하나씩 테스트 해 보 자.
    1.stateUnspecified
    중국어 의 뜻 은 지정 되 지 않 은 상태 입 니 다.안 드 로 이 드:windowSoftInputMode 속성 을 설정 하지 않 았 을 때 소프트웨어 는 기본적으로 이러한 상호작용 방식 을 사용 합 니 다.시스템 은 인터페이스 에 따라 해당 하 는 소프트 키보드 의 디 스 플레이 모드 를 사용 합 니 다.예 를 들 어 인터페이스 에 텍스트 와 버튼 만 있 을 때 소프트 키 보드 는 자동 으로 꺼 지지 않 습 니 다.입력 할 필요 가 없 기 때 문 입 니 다.그렇다면 화면 에 초점 을 맞 춘 입력 상자 가 나 타 났 을 때 소프트 키 보드 는 자동 으로 꺼 지지 않 을 까?이것 은 정말 확실 하지 않다!예 를 들 어 아래 의 이 인터페이스 레이아웃 에서 소프트 키 보드 는 자동 으로 꺼 지지 않 습 니 다.

 기본적으로 이런 인터페이스 상황 에서 시스템 은 사용자 가 소프트 키 보드 를 필요 로 하 는 지 확인 하지 않 기 때문에 자동 으로 꺼 지지 않 는 다 는 것 이다.그런데 왜 꼭 그렇지 는 않 을까요?이것 은 우리 가 이 레이아웃 의 밖 에 있 으 면 하 나 를 감 싸 기 때문이다.
ScrollView,소프트 키보드 가 자동 으로 튀 어 나 옵 니 다!
다음 레이아웃 파일 에서 소프트 키 보드 는 자동 으로 팝 업 됩 니 다.

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
 
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:onClick="toOther"
                android:text=" " />
 
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    </ScrollView>
 
</LinearLayout>
   이것 은 확실히 매우 이상 한 판단 방식 이다.따라서 우 리 는 속성 이 stateUnspecified 로 설정 되 었 을 때 시스템 은 기본적으로 소프트 키 보드 를 꺼 내지 않 지만 초점 을 맞 춘 입력 상자 의 인터페이스 가 굴 러 가 는 수요 가 있 을 때 자동 으로 소프트 키 보드 를 꺼 낸다 는 결론 을 얻 을 수 있다.초점 을 맞 추 려 는 입력 상 자 를 강조해 야 하 는 이 유 는 입력 상자 가 초점 을 맞 추 지 않 으 면 소프트 키보드 도 자동 으로 꺼 지지 않 기 때 문 입 니 다.인터페이스 가 소프트 키 보드 를 자동 으로 꺼 내지 않도록 하 는 해결 방안 중 하 나 는 xml 파일 에 비 입력 상자 컨트롤 을 설정 하여 초점 을 맞 춰 키보드 가 꺼 지지 않도록 하 는 것 입 니 다.
    2.stateUnchanged
    중국어 의 뜻 은 상태 가 변 하지 않 는 다 는 뜻 입 니 다.우 리 는 이 말 을 어떻게 이해 해 야 합 니까?사실은 이해 하기 쉽다.즉,현재 인터페이스의 소프트 키보드 상 태 는 이전 인터페이스의 소프트 키보드 상태 에 달 려 있다.예 를 들 어 현재 인터페이스 키보드 가 숨겨 져 있다 면 점프 후의 인터페이스,소프트 키보드 도 숨겨 져 있다.현재 인터페이스 가 표시 되 어 있다 면 점프 후의 인터페이스,소프트 키보드 도 표시 상태 입 니 다.
    3.stateHidden
    말 그대로 만약 에 우리 가 이 속성 을 설정 하면 키보드 상 태 는 반드시 숨겨 져 있 을 것 이다.지난 화면 이 어떤 상태 든 현재 화면 이 입력 하 는 수요 가 있 든 없 든 어차피 표시 되 지 않 는 다.따라서 소프트 키보드 의 자동 팝 업 을 제어 하기 위해 이 속성 을 설정 할 수 있 습 니 다.
    4.stateAlwaysHidden
    이 속성 도 소프트 키 보드 를 숨 길 수 있 습 니 다.하지만 저 는 아직 stateHidden 속성 과 의 차 이 를 모 릅 니 다.stackOverFlow 에 가서 물 어 보 려 고 했 는데 Great Wall,ㅎ ㅎ ㅎ...병마 가 방 교장 선생님 을 빨리 이기 기 를 기원 합 니 다.
    5.stateVisible
    이 속성 으로 설정 하면 소프트 키 보드 를 소환 할 수 있 으 며,인터페이스 에 입력 상자 가 없 더 라 도 강제로 소환 할 수 있 습 니 다.
    6.stateAlwaysVisible
    이 속성 도 키 보드 를 소환 할 수 있 지만 stateVisible 속성 과 는 작은 차이 가 있 습 니 다.예 를 들 어 stateVisible 속성 으로 설정 되 어 있 습 니 다.현재 인터페이스 키보드 가 표시 되 어 있다 면 단 추 를 누 르 고 다음 인터페이스 로 넘 어 갈 때 소프트 키 보드 는 입력 상자 에 초점 을 잃 어 숨 깁 니 다.우리 가 다시 현재 인터페이스 로 돌아 갈 때 키 보드 는 이때 숨겨 집 니 다.그러나 만약 에 우리 가 stateAlways Visible 로 설정 하면 우 리 는 다음 화면 으로 넘 어 갑 니 다.소프트 키 보드 는 숨겨 져 있 지만 우리 가 다시 돌아 올 때 소프트 키 보드 는 표 시 됩 니 다.그래서 이 Always 는 이 차 이 를 설명 했다.어떤 상황 이 현재 인터페이스 에 도달 하 든(정상 적 인 점프 또는 이전 인터페이스 가 사용자 에 게 되 돌아 오 든)소프트 키 보드 는 모두 상 태 를 나타 낸다.
    여기까지 말 하면 저 는 위의 stateHidden 과 stateAlways Hidden 을 연 상 했 습 니 다.차이 점도 마찬가지 라 고 생각 합 니 다.즉,stateAlways Hidden 은 어떻게 든 숨겨 져 있 지만 다음 화면 으로 넘 어 갈 때 소프트 키보드 가 소환 되면 현재 화면 이 사용자 에 게 돌아 올 때 키 보드 는 숨겨 지지 않 을 것 입 니 다.하지만...나 는 아직 다음 인터페이스 로 넘 어 갈 수 있 는 방법 을 찾 지 못 했 고 현재 인터페이스의 소프트 키 보드 를 사라 지지 않 게 하 는 방법 을 찾 지 못 했 기 때문에 잠시 검증 할 수 없다.
    7.adjustUnspecified
    이 속성 부터 소프트 키보드 의 디 스 플레이 와 숨 김 모드 를 설정 하 는 것 이 아니 라 소프트 키보드 와 소프트웨어 의 디 스 플레이 내용 간 의 디 스 플레이 관 계 를 설정 합 니 다.당신 이 우리 와 이 값 을 설정 하지 않 았 을 때,이 옵션 도 기본 설정 모드 입 니 다.이 상황 에서 시스템 은 인터페이스 에 따라 서로 다른 모델 을 선택한다.만약 인터페이스 안에 스크롤 할 수 있 는 컨트롤 이 있다 면,예 를 들 어 ScrowView 는 시스템 이 스크롤 할 수 있 는 인터페이스의 크기 를 줄 여 소프트 키보드 가 표시 되 더 라 도 모든 내용 을 볼 수 있 도록 한다.레이아웃 에 스크롤 컨트롤 이 없 으 면 소프트 키 보드 는 일부 내용 을 덮 을 수 있 습 니 다.아래 그림 에서 차 이 를 볼 수 있 습 니 다.
   스크롤 컨트롤 이 없 으 면 소프트 키보드 아래 의 레이아웃 이 가 려 집 니 다.수정 하려 면 소프트 키 보드 를 숨 기 고 선택 할 수 밖 에 없습니다.그리고 위의 레이아웃 에 중점 을 두 세 요.우리 가 선택 한 입력 상자 가 아래로 쏠 릴 때 위의 제목 표시 줄 과 레이아웃 이 소프트 키보드 에 의 해 올 라 갑 니 다.이 특징 을 기억 하 세 요.뒤에 속성 이 있 기 때문에 이것 과 효과 가 다 릅 니 다.

레이아웃 안에 미끄럼 컨트롤 이 있 습 니 다.시스템 은 전체 인터페이스의 크기 를 자동 으로 줄 일 수 있 습 니 다.따라서 우 리 는 소프트 키보드 위의 작은 구역 에 모든 입력 상 자 를 표시 할 수 있 습 니 다.
 
    이것 이 바로 두 개의 디 스 플레이 모드 간 의 차이 이다.
    8.adjustResize
    이 속성 은 Activity 의 주 창 이 항상 크기 를 조정 하여 소프트 키보드 디 스 플레이 공간 을 확보 한 다 는 것 을 나타 낸다.
    우 리 는 먼저 효 과 를 보 여 준다.
    이 위 에 있 는 제목 표시 줄 과 단 추 를 주의 깊 게 관찰 하고,adjustResize 속성 으로 설정 한 후,미끄럼 컨트롤 이 없 는 레이아웃 에 대해 서 는 모든 입력 상 자 를 선택 할 수 없 지만,창의 표시 방식 이 변 했 습 니 다.기본 속성 일 때 전체 레이아웃 은 위로 올 라 갔 지만,adjustResize 속성 으로 설정 되 어 있 습 니 다.레이아웃 의 위 치 는 변 하지 않 았 습 니 다.이것 이 가장 큰 차이 이다.

미끄럼 컨트롤 이 있 는 레이아웃 에 있어 서 디 스 플레이 효 과 는 기본 값 과 같 습 니 다.

    9.adjustPan
    이 속성 으로 설정 하면 Activity 의 화면 크기 는 소프트 키보드 의 공간 을 확보 하기 위해 조정 되 지 않 고 다른 전략 을 사용 합 니 다.시스템 은 레이아웃 이동 을 통 해 사용자 가 입력 해 야 할 입력 상자 가 사용자 의 실업 범위 안에 있 음 을 보증 하고 사용자 가 입력 한 내용 을 볼 수 있 도록 합 니 다.스크롤 컨트롤 이 없 는 레이아웃 에 있어 서 이것 은 기본 설정 입 니 다.우리 가 선택 한 위치 가 아래로 기울 면 위의 제목 표시 줄 과 일부 컨트롤 이 위 에 올 라 갑 니 다.그러나 스크롤 컨트롤 이 있 는 레이아웃 은 다 릅 니 다.아래 효과 도 를 보 겠 습 니 다.
    우선,이것 은 소프트 키보드 가 꺼 지지 않 았 을 때 스크롤 컨트롤 의 표시 범위 가 있 고 맨 아래 에 표 시 된 것 은 9 입 니 다.

    5 개의 입력 상 자 를 클릭 하면 아래 의 현상 을 발견 할 수 있 습 니 다.
    맨 위 에 단추 만 표시 되 고 제목 표시 줄 은 볼 수 없습니다.

    맨 아래 도 8 까지 만 미 끄 러 질 수 있 고,아래 내용 도 미 끄 러 질 수 없다.

   그래서 우 리 는 이 속성의 작용 을 이해 할 수 있다.
    이상 의 실험 을 통 해 우 리 는'adjust...'의 속성 을 설정 하지 않 으 면 스크롤 컨트롤 이 없 는 레이아웃 에 있어 adjustPan 방식 을 사용 하고 스크롤 컨트롤 이 있 는 레이아웃 에 대해 서 는 adjustResize 방식 을 사용 한 다 는 결론 을 얻 을 수 있 습 니 다.
    위의 이런 지식 을 알 게 된 후에 우 리 는 자신의 수요 에 따라 다른 방식 을 설정 할 수 있다.그리고 인터페이스 를 불 러 올 때 소프트 키 보드 를 표시 하지 않 는 방법 에 대해 서도 잘 알 고 있 습 니 다.
    안녕 히 주 무 세 요.방학 동안 분투 하고 있 는 프로그래머 들.

좋은 웹페이지 즐겨찾기