在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图:
输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示:
二、简单解决方案
方法一
在你的activity中的oncreate中setContentView之前写上这个代码
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);方法二
在项目的AndroidManifest.xml文件中界面对应的
android:windowSoftInputMode="stateVisible|adjustResize"这样会让屏幕整体上移。如果加上的是android:windowSoftInputMode="adjustPan"这样键盘就会覆盖屏幕。
关于android:windowSoftInputMode
activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
这个属性能影响两件事情:
【一】当有焦点产生时,软键盘是隐藏还是显示
【二】是否减少活动主窗口大小以便腾出空间放软键盘
它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。
例如:
各值的含义:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
方法三
把顶级的layout替换成ScrollView,或者说在顶级的Layout上面再加一层ScrollView。这样就会把软键盘和输入框一起滚动了,软键盘会一直处于底部。
三、代码可控性方法
1.主界面布局文件
2.自定义LinearLayoutView
该组件可实现根据软键盘的弹出/关闭而隐藏和显示某些区域,这是问题解决最关键部分,主要有两点:
①重写onSizeChanged方法
该方法是View生命周期的方法,当View尺寸发生变化时调用,如竖屏横屏切换、软键盘弹出。这里当软键盘弹出造成View尺寸改变,就会调用onSizeChanged方法,在该方法实现代码的核心思想是根据尺寸变化,当变大(软键盘弹出),将某些区域隐藏以给编辑界面预留出足够显示空间;当恢复(软键盘关闭),再将隐藏的区域显示出来
protectedvoidonSizeChanged(intw,finalinth,intoldw,finalintoldh){super.onSizeChanged(w,h,oldw,oldh);uiHandler.post(newRunnable(){publicvoidrun(){if(oldh-h>SOFTKEYPAD_MIN_HEIGHT){//软键盘关闭keyBordStateListener.stateChange(KEYBORAD_SHOW);//回调方法显示部分区域}else{//软键盘弹出if(keyBordStateListener!=null){keyBordStateListener.stateChange(KEYBORAD_HIDE);//回调方法隐藏部分区域}}}});}②提供KeyBordStateListener接口采用回调机制调用接口的实现方法。
代码:
publicclassMainActivityextendsActivityimplementsKeyBordStateListener{privateLinearLayoutViewresizeLayout;privateLinearLayoutlogoLayout;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){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方法中调用@OverridepublicvoidstateChange(intstate){//TODOAuto-generatedmethodstubswitch(state){caseLinearLayoutView.KEYBORAD_HIDE:logoLayout.setVisibility(View.VISIBLE);break;caseLinearLayoutView.KEYBORAD_SHOW:logoLayout.setVisibility(View.GONE);break;}}四、实现效果
键盘弹出:
键盘关闭:
以上所述是小编给大家介绍的Android软键盘遮挡的四种完美解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!