Android 键盘遮盖界面布局问题

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

    • A="stateUnspecified" 依赖系统或者主题去设置键盘弹出
    • A="stateHidden" 控制键盘不自动弹出
    • A="stateUnchanged" 保持上一个Activity的键盘弹出属性设置
    • A="stateAlwaysHidden" 当Activity主窗口获取焦点时,软键盘一直隐藏
    • A="stateVisible" 在没有输入框的情况下也可点击弹出键盘
    • A="stateAlwaysVisible" 总是显示状态
    • A="adjustUnspecified" 默认设置,可能遮挡内容,比较死板
    • A="adjustResize" 自动调整屏幕大小,留足软键盘空间
    • A="adjustPan" 系统通过布局移动来调节用户布局,保证输入框一直在视野范围内
    • B="keyboard" 键盘模式发生变化,当需要调用自定义键盘时使用
    • B="keyboardHidden" 打开手机自带键盘 键盘的可用性发生了改变
    • B="orientation" 横竖屏切换
    • B="fontScale" 全局字体发生变化
    • B="ScreenSize" 屏幕大小变化

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

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

     
    
  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.具体什么时候隐藏,可同伙消息传递机制或者点击事件去控制

你可能感兴趣的:(Android 键盘遮盖界面布局问题)