Android 在EditText进行软键盘弹出时,通常会遮挡输入框,遮挡RecyclerView
解决方案:全局监听屏幕当前显示布局的大小以及实际该布局的高度,如果实际显示的高度大于屏幕高度,则视为软键盘弹出,进行控件的动态改变即可。

 private ViewTreeObserver.OnGlobalLayoutListener getGlobalLayoutListener(final View decorView, final View editView,final View barrageRlView) {        return new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                ====================================                = 根视图的高度,及显示在屏幕的高度                ====================================                Rect r = new Rect();                decorView.getWindowVisibleDisplayFrame(r);                ====================================                = 根布局的实际高度                ====================================                int height = decorView.getContext().getResources().getDisplayMetrics().heightPixels;               int diff = height - r.bottom;                ========================================================================               = 实际view所占高度与显示高度的差 差值较大的时候即为软键盘弹出 通常差值为零时,软键盘折叠    =========================================================================//Logger.d(Logger._JN, "onGlobalLayout height :%s r.bottom %s editView.getBottom :%s  navBottomHeight : %s", //height, r.bottom, editView.getBottom(), height - editView.getBottom());                =========================================================================                = 当根布局的实际高度与显示高度产生差值的时候,判定软键盘弹出                =========================================================================                if (diff >= 25) {                =========================================================================                = 软键盘弹出,如果recyclerView的条目过多,可以将最后一条数据显示到前端,避免被遮挡                =========================================================================                 mBarragesRl.scrollToPosition(mBarrageAdapter.data().size() -1);                    //将EditTextView进行向上移动                    if (editView.getPaddingBottom() != diff - (height - editView.getBottom())) {                        editView.setPadding(0, 0, 0, diff - (height - editView.getBottom()) - mDiff);                    }                } else {                    mDiff = diff;                    =========================================================================                    = 将EditTextView复原                    =========================================================================                    if (editView.getPaddingBottom() != 0) {                        editView.setPadding(0, 0, 0, 0);                    }                }            }        };    }    @Override    protected void initViews(Bundle savedInstanceState) {    decorView = getActivity().getWindow().getDecorView();    decorView.getViewTreeObserver().addOnGlobalLayoutListener(getGlobalLayoutListener(decorView, mEditArea));}

更多相关文章

  1. android编辑布局文件时非要降低api level或者更改主题才能显示布
  2. android的frameworks层键盘事件处理流程分析
  3. Android 线性布局:LinearLayout
  4. Android学习笔记-Android非布局activity中布局文件及控件加载方
  5. Android应用开发学习之相对布局
  6. Android merge抽象布局介绍
  7. android View页面布局总结 最全总结。
  8. Android系统回顾(三):UI之GridLayout布局
  9. android软键盘enter键的替换与事件监听

随机推荐

  1. android 根据屏幕大小自行选择图片
  2. Android(安卓)init进程启动
  3. Android(安卓)应用性能评估
  4. android基础的回顾(一)开发工具的转变---an
  5. Android(安卓)Canvas类介绍
  6. Google Android(安卓)简介
  7. 作为一名Android开发者,你有过迷茫吗?
  8. 提示服务Notification在Android中的应用
  9. 第11章 Android的线程和线程池
  10. Android与服务器端数据交互(http协议整合s