Android里隐藏软键盘时页面抖动的问题

今天遇到一个小问题。场景是这样

一级页面点击搜索按钮弹出 二级搜索页面
二级页面点击搜索 输入框,弹出软键盘
在二级页面点击返回箭头,返回到一级页面

这时,一级页面出现抖动现象。即页面先上弹,然后再向下伸展。感觉页面出现了抖动。

原有的代码如下
ImageView backView = (ImageView) searchBar.findViewById(R.id.img_search_back_arrow); backView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideInput(); finish(); } });
即点击之后,调用键盘隐藏和activity的finish函数。

修改后如下
ImageView backView = (ImageView) searchBar.findViewById(R.id.img_search_back_arrow); backView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideInput(); getRecyclerView().postDelayed(new Runnable() { @Override public void run() { finish(); } },200); } });

原理分析:
初始代码为什么会导致抖动,是因为键盘隐藏操作的耗时导致。 当调用键盘隐藏时,系统服务在后台执行键盘隐藏的操作。而finish已经执行完成,返回到一级页面,此时由于键盘隐藏系统服务尚未执行完成,页面被键盘顶上去。而之后,键盘隐藏执行完成,页面又弹向下。于是导致抖动效果。
改动后的代码延时200ms之后再finish当前页面。即等待键盘隐藏完成再finish当前页面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容