一、android 软键盘弹出隐藏挤压界面等问题

1、横屏时,点击输入框出现全键盘解决方案: 在EditText、searchview等控件中加

android:imeOptions="flagNoExtractUi"

2、竖屏时,安卓会出现半屏。 
case1:你的输入框处于中下的位置,这样的话,键盘可能挡住输入框。 解决方法:在manifest中对activity设置

android:windowSoftInputMode="adjustResize"

这样activity的主窗口总会resize为键盘提供空间

case2:你的输入框处于偏上面,一般情况下这样就不会有什么问题,但是如果你的界面纵向方面使用的是layout_weight即比重来分布页面的话,软件盘会压缩整个window,导致输入框部分被压缩。 解决方法:在manifest中对activity设置

android:windowSoftInputMode="adjustPan"

这样键盘不会对压缩原窗口,只会遮盖下面一部分内容。这样输入框不会被压缩了。

3、刚进入一个activity,会focus 输入框,这时会主动弹出软键盘,如果不希望自动弹出,那么可先让其他的不重要的控件获取焦点

android:focusableInTouchMode="true"

4、判断软键盘当前是否处于弹出状态

if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)

5、手动隐藏软键盘

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

6、手动弹出软键盘

((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);

6、触摸任意非EditText位置关闭软键盘

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
 if (isShouldHideKeyboard(v, ev)) {
 hideKeyboard(v.getWindowToken());
}

}
}

 /**
     * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏
     *
     * @param v
     * @param event
     * @return
     */
    private boolean isShouldHideKeyboard(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] l = {0, 0};
            v.getLocationInWindow(l);
            int left = l[0],
                top = l[1],
                bottom = top + v.getHeight(),
                right = left + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                // 点击EditText的事件,忽略它。
                return false;
            } else {
                return true;
            }
        }
        // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点
        return false;
    }

/**
     * 获取InputMethodManager,隐藏软键盘
     * @param token
     */
    private void hideKeyboard(IBinder token) {
        if (token != null) {
            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }

 

更多相关文章

  1. Android下uid与多用户释疑
  2. Android下uid与多用户释疑(一)
  3. Android控件EditText之点击软键盘中的回车键不换行,而是跳到下一
  4. android 软键盘处理
  5. Android软键盘弹出不影响布局的方法
  6. android 键盘关闭/显示
  7. Android 设置EditText不会自动弹出键盘

随机推荐

  1. Android(安卓)监听EditText文本输入 Edit
  2. 什么是Dalvik【摘】
  3. Android(安卓).9图片使用报错...报错:AAP
  4. Android(安卓)Transition(Android过渡动画
  5. android 获取.thumbnail文件下的小图标
  6. Android——NDK下载提示缺少toolchains问
  7. Android--用Pull解析器将对象解析成xml文
  8. 2011.07.05(3)——— android PopupWindo
  9. ImageView的scaletype属性
  10. Android(安卓)在非UI线程直接更新UI信息