Android 소프트 키보드 부적 응 해결 방법 총화
선언:
많은 로그 인 인터페이스 를 쓰 는 개발 자 들 이 문 제 를 만 날 수 있 습 니 다.그것 은 바로 로그 인 인터페이스 에서 입력 상 자 를 클릭 할 때 아래 의 단 추 는 때때로 입력 상자 에 의 해 가 려 집 니 다.이것 은 사용자 의 체험 에 불리 하기 때문에 많은 사람들 이 소프트 키보드 가 튀 어 나 올 때 단 추 를 밀 어 낼 수 있 기 를 바 랍 니 다.많은 개발 자 들 이 키보드 의 상 태 를 감청 하려 고 하 는데 이것 은 의심 할 여지없이 매우 번 거 로 운 방법 이다.
우 리 는 AndroidManifest.xml 의 Activity 에서 속성 을 설정 할 수 있 습 니 다.Android:windowSoftInputMode="adjustResize",소프트 키보드 가 팝 업 될 때 메 인 창 레이아웃 을 다시 배치 하고 onSize Changed 방법 을 호출 합 니 다.우리 가"adjustResize"로 설정 할 때 우리 의 화면 은 전체 화면 모드 로 설정 하지 마 십시오.그렇지 않 으 면 이 속성 을 설정 해도 아무런 효과 가 없습니다.안 드 로 이 드:windowSoftInputMode="adjustPan"을 설정 할 때 메 인 창 은 onSize Changed 방법 을 사용 하지 않 습 니 다.인터페이스의 일부분 은 소프트 키보드 로 덮 여 소프트 키보드 위로 밀 려 나 지 않 습 니 다.
우 리 는 코드 를 통 해 이 속성 을 설정 한 후에 입력 법 을 팝 업 할 때 시스템 이 무엇 을 했 는 지 테스트 합 니 다.
레이아웃 레이아웃 다시 쓰기:
public class ResizeLayout extends LinearLayout{
private static int count = 0;
public ResizeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.e("onSizeChanged " + count++, "=>onResize called! w="+w + ",h="+h+",oldw="+oldw+",oldh="+oldh);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
Log.e("onLayout " + count++, "=>OnLayout called! l=" + l + ", t=" + t + ",r=" + r + ",b="+b);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.e("onMeasure " + count++, "=>onMeasure called! widthMeasureSpec=" + widthMeasureSpec + ", heightMeasureSpec=" + heightMeasureSpec);
}
우리 의 레이아웃 은:
<com.winuxxan.inputMethodTest.ResizeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:id="@+id/bottom_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="bottom">s
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:background="#77777777"
/>
</LinearLayout>
</com.winuxxan.inputMethodTest.ResizeLayout>
AndroidManifest.xml 의 Activity 설정 속성:android:windowSoftInputMode="adjustResize"프로그램 을 실행 하고 텍스트 상 자 를 클릭 하여 디 버 깅 정 보 를 봅 니 다.
E/onMeasure 6(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742024
E/onMeasure 7(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742025
E/onSizeChanged 8(7960): =>onSizeChanged called! w=320,h=201,oldw=320,oldh=377
E/onLayout 9(7960): =>OnLayout called! l=0, t=0,r=320,b=201
디 버 깅 결 과 를 통 해 알 수 있 듯 이 텍스트 상 자 를 클릭 한 후에 루트 레이아웃 은 onMeasure,onSizeChanged 와 onLayout 를 호출 했 습 니 다.windowSoftInputMode 의 값 이 adjustPan 으로 설정 되면 이 Activity 메 인 창 은 소프트 키보드 의 공간 을 남기 기 위해 화면의 크기 를 조정 하지 않 습 니 다.반면 현재 창의 내용 은 키보드 로 덮어 쓰 지 않 고 사용자 가 입력 한 내용 을 항상 볼 수 있 도록 자동 으로 이동 합 니 다.이것 은 일반적으로 사용자 가 덮어 쓰 는 내용 과 의 상호작용 을 얻 기 위해 소프트 키 보드 를 닫 을 수 있 기 때문에 크기 조정 을 기대 하지 않 는 다.
위의 예 에서 우 리 는 AndroidManifest.xml 의 속성 을 변경 합 니 다.android:windowSoftInputMode="adjustPan"
다시 실행 하고 텍스트 상 자 를 클릭 하여 디 버 깅 정 보 를 봅 니 다.
E/onMeasure 6(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742200
E/onMeasure 7(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742201
E/onLayout 8(8378): =>OnLayout called! l=0, t=0,r=320,b=377
우 리 는 시스템 도 measrue 와 layot 를 다시 진행 하 였 으 나,layot 과정 에서 onSizeChanged 가 호출 되 지 않 았 음 을 발견 하 였 습 니 다.이것 은 입력 법 팝 업 전후 에 원래 레이아웃 의 크기 가 바 뀌 지 않 았 음 을 설명 합 니 다.물론 다른 속성 을 설정 할 수 있 습 니 다:
"stateUnspecified"
소프트 키보드 의 상태 가 지정 되 지 않 았 습 니 다.시스템 은 적당 한 상 태 를 선택 하거나 테마 에 의존 하 는 설정 을 선택 할 것 입 니 다.
이것 은 소프트웨어 디스크 행 위 를 위 한 기본 설정 입 니 다.
"stateUnchanged"
부 드 러 운 키 보드 는 지난번 에 어떤 상 태 였 든 보이 거나 숨 겼 든 메 인 창 이 앞 에 나 타 났 을 때 유 지 됩 니 다.
"stateHidden"
사용자 가 이 Activity 를 선택 할 때 소프트 키 보드 는 숨겨 집 니 다.즉,사용자 가 이 Activity 로 탐색 하 는 것 을 확인 할 때 다른 Activity 를 떠 나 서 되 돌아 가 는 것 이 아 닙 니 다.
"stateAlwaysHidden"
소프트 키 보드 는 항상 숨겨 져 있 습 니 다.이 Activity 주 창 이 초점 을 가 져 올 때.
"stateVisible"
소프트 키 보드 는 볼 수 있 습 니 다.그것 이 정상 적 이 고 적당 할 때(사용자 가 Activity 메 인 창 으로 탐색 할 때).
"stateAlwaysVisible"
사용자 가 이 Activity 를 선택 할 때 소프트 키 보드 는 볼 수 있 습 니 다.즉,사용자 가 이 Activity 로 탐색 하 는 것 을 확인 할 때 다른 Activity 를 떠 나 서 돌아 가 는 것 이 아 닙 니 다.
"adjustUnspecified"
소프트 키보드 의 공간 을 남 길 수 있 도록 이 Activity 주 창 크기 를 조정 할 지,화면의 현재 초점 을 맞 출 지 여 부 는 지정 되 지 않 습 니 다.시스템 은 이 모드 에서 창의 내용 에 의존 하 는 레이아웃 보기 가 있 는 지 여 부 를 자동 으로 선택 합 니 다.이러한 보기 가 있 으 면 이 창 은 크기 를 조정 합 니 다.이러한 가설 은 스크롤 창의 내용 을 작은 영역 에서 볼 수 있 습 니 다.이것 은 주 창의 기본 행동 설정 입 니 다.
"adjustResize"
이 Activity 메 인 창 은 항상 소프트 키보드 의 공간 을 남기 기 위해 화면의 크기 를 조정 합 니 다.
"adjustPan"
이 Activity 메 인 창 은 소프트 키보드 의 공간 을 남기 기 위해 화면의 크기 를 조정 하지 않 습 니 다.반면 현재 창의 내용 은 키보드 로 덮어 쓰 지 않 고 사용자 가 입력 한 내용 을 항상 볼 수 있 도록 자동 으로 이동 합 니 다.이것 은 일반적으로 사용자 가 덮어 쓰 는 내용 과 의 상호작용 을 얻 기 위해 소프트 키 보드 를 닫 을 수 있 기 때문에 크기 조정 을 기대 하지 않 는 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.