안 드 로 이 드 소프트 키보드 가 려 진 네 가지 완벽 한 솔 루 션
편집 상자 에 내용 을 입력 할 때 소프트 키보드 가 튀 어 나 오고 핸드폰 화면 구역 이 제한 되 어 있 으 면 입력 인터페이스 가 가 려 집 니 다.문제 효과 도 를 먼저 보 겠 습 니 다.
사용자 이름과 비밀 번 호 를 입력 하면 시스템 에서 키보드 가 튀 어 나 와 시스템 키보드 가 텍스트 상 자 를 가 릴 수 있 습 니 다.그림 참조:
비밀 번 호 를 입력 할 때 입력 상자 가 시스템 키보드 에 가 려 져 사용자 의 조작 체험 을 크게 낮 추 었 습 니 다.이것 이 바로 개발 에서 흔히 볼 수 있 는 소프트 키보드 가 가 려 진 문제 입 니 다.어떻게 해결 해 야 합 니까?
2.간단 한 해결 방안
방법 1
activity 의 oncreate 에 setContentView 전에 이 코드 를 쓰 세 요.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
방법 2프로젝트 의 AndroidManifest.xml 파일 에 인터페이스 에 대응 하 는
android:windowSoftInputMode="stateVisible|adjustResize"
이렇게 하면 화면 전 체 를 위로 이동 시 킬 수 있다.안 드 로 이 드:windowSoftInputMode="adjustPan"을 추가 하면 키보드 가 화면 을 덮어 씁 니 다.android:windowSoftInputMode 에 대하 여
activity 메 인 창 과 소프트 키보드 의 상호작용 모드 는 입력 패 널 차단 문 제 를 피 할 수 있 습 니 다.Android 1.5 이후 의 새로운 기능 입 니 다.
이 속성 은 두 가지 일 에 영향 을 줄 수 있 습 니 다:
[1]초점 이 생 겼 을 때 소프트 키 보드 는 숨 깁 니까?표시 합 니까?
【2】소프트 키 보드 를 띄 울 수 있 도록 활성 주 창 크기 를 줄 일 지 여부
이 설정 은 아래 목록 의 값 이나"state..."값 에"adjust..."값 을 더 한 조합 이 어야 합 니 다.모든 그룹 에 여러 개의 값―여러 개의"state..."values 를 설정 합 니 다.예 를 들 어&mdash 는 정의 되 지 않 은 결과 가 있 습 니 다.각 값 사 이 를|로 나누다.
예 를 들 면:
<activity android:windowSoftInputMode="stateVisible|adjustResize". . . >
이 설정 의 값("stateUnspecified"와"adjustUnspecified"를 제외 하고)은 테마 에 설 정 된 값 을 덮어 씁 니 다.각 값 의 의미:
【A】stateUnspecified:소프트 키보드 의 상 태 는 지정 되 지 않 았 습 니 다.시스템 은 적당 한 상 태 를 선택 하거나 테마 에 의존 하 는 설정 을 선택 할 것 입 니 다.
【B】stateUnchanged:이 activity 가 나타 날 때 소프트 키 보드 는 이전 activity 의 상 태 를 유지 합 니 다.숨 기 든 표시 하 든.
【C】stateHidden:사용자 가 activity 를 선택 할 때 소프트 키 보드 는 항상 숨겨 집 니 다.
【D】stateAlwaysHidden:이 Activity 주 창 이 초점 을 가 져 올 때 소프트 키보드 도 항상 숨겨 집 니 다.
[E]stateVisible:소프트 키 보드 는 보통 볼 수 있 습 니 다.
【F】stateAlwaysVisible:사용자 가 activity 를 선택 할 때 소프트 키보드 가 항상 표시 되 는 상태
【G】adjustUnspecified:기본 설정 은 시스템 에서 숨 길 지 표시 할 지 결정 합 니 다.
【H】adjustResize:이 액 티 비 티 는 소프트 키보드 의 공간 을 남기 기 위해 항상 화면의 크기 를 조정 합 니 다.
【I】adjustPan:현재 창의 내용 은 키보드 로 덮어 쓰 지 않 고 사용자 가 입력 한 부분 을 항상 볼 수 있 도록 자동 으로 이동 합 니 다.
방법
최상 위 layot 를 ScrollView 로 바 꾸 거나 최상 위 Layout 에 ScrollView 를 추가 합 니 다.이렇게 하면 소프트 키 보드 를 입력 상자 와 함께 굴 리 고 소프트 키 보드 는 계속 아래쪽 에 있 을 것 이다.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
</LinearLayout>
</ScrollView>
그러나 이런 방법 들 은 비교적 간단 하지만 어느 정도 한계 가 있 고 유연성 이 없 으 며 기대 하 는 효과 에 이 르 지 못 할 때 가 있 습 니 다.여러분 은 시도 해 보 세 요.아마도 당신 의 문 제 를 해결 할 수 있 을 것 입 니 다.다음은 코드 를 제어 할 수 있 는 방법 을 알려 드 리 겠 습 니 다.3.코드 제어 방법
1.메 인 화면 레이아웃 파일
<com.jereh.overidelinearlayout.LinearLayoutView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:id="@+id/login_root_layout"
android:layout_height="match_parent"
android:orientation="vertical">
<!― -->
<LinearLayout
android:id="@+id/login_layout_logo"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="10"
android:background="#ff0000"
android:orientation="vertical" >
<ImageView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/login_logo"
android:scaleType="fitXY"/>
</LinearLayout>
<!― -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:layout_weight="3"
android:orientation="vertical" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_alignParentBottom="true"
android:layout_gravity="center_vertical"
android:hint=" "
android:ems="10" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_alignParentBottom="true"
android:layout_gravity="center_vertical"
android:hint=" "
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
</com.jereh.overidelinearlayout.LinearLayoutView>
LinearLayoutView 라 는 사용자 정의 구성 요소 가 관건 임 을 알 수 있 습 니 다.2.사용자 정의 LinearLayoutView
이 구성 요 소 는 소프트 키보드 의 팝 업/닫 기 에 따라 일부 영역 을 숨 기 고 표시 할 수 있 습 니 다.이것 은 문제 해결 의 가장 관건 적 인 부분 입 니 다.주로 두 가지 가 있 습 니 다.
① onSizeChanged 재 작성 방법
이 방법 은 View 생명주기 의 방법 으로 View 사이즈 가 변 할 때 호출 하 는 것 이다.예 를 들 어 세로 화면 가로 화면 전환,소프트 키보드 팝 업 등 이다.여기 서 소프트 키보드 팝 업 이 View 사이즈 변 화 를 일 으 키 면 onSize Changed 방법 을 사용 합 니 다.이 방법 에서 코드 를 실현 하 는 핵심 사상 은 사이즈 변화 에 따라 커지 면(소프트 키보드 팝 업)일부 구역 을 숨 겨 편집 인터페이스 에 충분 한 디 스 플레이 공간 을 남 겨 두 는 것 입 니 다.복구(소프트 키보드 닫 기)하면 숨겨 진 영역 을 표시 합 니 다.
protected void onSizeChanged(int w,final int h, int oldw,final int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
uiHandler.post(new Runnable() {
public void run() {
if (oldh - h > SOFTKEYPAD_MIN_HEIGHT){ //
keyBordStateListener.stateChange(KEYBORAD_SHOW);//
}else { //
if(keyBordStateListener != null){
keyBordStateListener.stateChange(KEYBORAD_HIDE);//
}
}
}
});
}
② KeyBordStateListener 인 터 페 이 스 를 제공 할 때 리 셋 메커니즘 으로 인 터 페 이 스 를 호출 하 는 실현 방법 을 사용한다.코드:
public interface KeyBordStateListener{ public void stateChange(int state);}//
private KeyBordStateListener keyBordStateListener;
public void setKeyBordStateListener(KeyBordStateListener keyBordStateListener) {
this.keyBordStateListener = keyBordStateListener;
}
LinearLayoutView :
public class LinearLayoutView extends LinearLayout{
public static final int KEYBORAD_HIDE = 0;
public static final int KEYBORAD_SHOW = 1;
private static final int SOFTKEYPAD_MIN_HEIGHT = 50;
private Handler uiHandler = new Handler();
public LinearLayoutView(Context context) {
super(context);
}
public LinearLayoutView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onSizeChanged(int w,final int h, int oldw,final int oldh) {
// TODO Auto-generated method stub
super.onSizeChanged(w, h, oldw, oldh);
uiHandler.post(new Runnable() {
@Override
public void run() {
if (oldh - h > SOFTKEYPAD_MIN_HEIGHT){
keyBordStateListener.stateChange(KEYBORAD_SHOW);
}else {
if(keyBordStateListener != null){
keyBordStateListener.stateChange(KEYBORAD_HIDE);}
}
}
});
}
private KeyBordStateListener keyBordStateListener;
public void 、setKeyBordStateListener(KeyBordStateListener keyBordStateListener) {
this.keyBordStateListener = keyBordStateListener;
}
public interface KeyBordStateListener{
public void stateChange(int state);
}
3.메 인 인터페이스 MainActivity
public class MainActivity extends Activity implements KeyBordStateListener {
private LinearLayoutView resizeLayout;
private LinearLayout logoLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// / LinearLayoutView
resizeLayout = (LinearLayoutView) findViewById(R.id.login_root_layout);
//
logoLayout = (LinearLayout) findViewById(R.id.login_layout_logo);
resizeLayout.setKeyBordStateListener(this);//
}
// , resizeLayout onSizeChanged
@Override
public void stateChange(int state) {
// TODO Auto-generated method stub
switch (state) {
case LinearLayoutView.KEYBORAD_HIDE:
logoLayout.setVisibility(View.VISIBLE);
break;
case LinearLayoutView.KEYBORAD_SHOW:
logoLayout.setVisibility(View.GONE);
break;
}
}
4.실현 효과키보드 팝 업:
키보드 닫 기:
위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 안 드 로 이 드 소프트 키보드 가 가 려 진 네 가지 완벽 한 해결 방안 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.