今天遇到一个小问题。场景是这样
一级页面点击搜索按钮弹出 二级搜索页面
二级页面点击搜索 输入框,弹出软键盘
在二级页面点击返回箭头,返回到一级页面
这时,一级页面出现抖动现象。即页面先上弹,然后再向下伸展。感觉页面出现了抖动。
原有的代码如下
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当前页面。