【Android】Android-键盘遮盖界面布局问题

一、在解决Android输入法键盘弹出问题是,我们先来了解几个常用的api

  1. <activity android:windowSoftInputMode= "A"'>

    • A=“stateUnspecified” 依赖系统或者主题去设置键盘弹出
    • A=“stateHidden” 控制键盘不自动弹出
    • A=“stateUnchanged” 保持上一个Activity的键盘弹出属性设置
    • A=“stateAlwaysHidden” 当Activity主窗口获取焦点时,软键盘一直隐藏
    • A=“stateVisible” 在没有输入框的情况下也可点击弹出键盘
    • A=“stateAlwaysVisible” 总是显示状态
    • A=“adjustUnspecified” 默认设置,可能遮挡内容,比较死板
    • A=“adjustResize” 自动调整屏幕大小,留足软键盘空间
    • A=“adjustPan” 系统通过布局移动来调节用户布局,保证输入框一直在视野范围内
  2. <activity android:configChanges="B">

    • B=“keyboard” 键盘模式发生变化,当需要调用自定义键盘时使用
    • B=“keyboardHidden” 打开手机自带键盘 键盘的可用性发生了改变
    • B=“orientation” 横竖屏切换
    • B=“fontScale” 全局字体发生变化
    • B=“ScreenSize” 屏幕大小变化

二、这次的问题是,一个表单填写,键盘挡住下方输入框,每次都得关闭键盘从新点击输入

  1. 解决–首先在清单文件里 activity 中标注:

     <activity android:name="****Activity" 
         android:configChanges="keyboardHidden|orientation|screenSize"
         android:windowSoftInputMode="stateHidden|adjustResize" />
    
  2. 用scrollview包裹布局,并设置键盘遮挡的最后一个EditView控件的监听事件

    lastEdit.addTextChangedListener(new TextWatcher() {

     	@Override
     	public void onTextChanged(CharSequence s, int start, int before, int count) {
     		scrollow.fullScroll(ScrollView.FOCUSABLES_ALL);
     	}
     	
     	@Override
     	public void beforeTextChanged(CharSequence s, int start, int count,
     			int after) {
     	}
     	@Override
     	public void afterTextChanged(Editable s) {
     	}
     });
    

3.扩张:隐藏键盘的方法:

 @Override  
public boolean dispatchTouchEvent(MotionEvent ev) {  

    // 获得当前得到焦点的View 
    View view = getCurrentFocus();  
	IBinder token=view.getWindowToken();
    InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
    im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); 
       
    return super.dispatchTouchEvent(ev);  
} 

4.具体什么时候隐藏,可同伙消息传递机制或者点击事件去控制

猜你喜欢

转载自blog.csdn.net/sslinp/article/details/83413296
今日推荐