Android SearchView 焦点问题
来源:互联网 发布:sql数据库删除表 编辑:程序博客网 时间:2024/06/06 02:47
问题:SearchView 在退出软键盘后,Focus依然存在的问题。并且还会抢其它控件Focus?在试过clearFocus后也依然不好使...
分析:原来当前焦点并不在SearchView 上,而是在它内部的 SearchAutoComplete mQueryTextView 上,所以SreachView clearFoucus没有效果。
这是SearchView 设置焦点的代码,其中调用了 mQueryTextView.requestFocus(direction, previouslyFocusedRect);
/** @hide */ @Override public boolean requestFocus(int direction, Rect previouslyFocusedRect) { // Don't accept focus if in the middle of clearing focus if (mClearingFocus) return false; // Check if SearchView is focusable. if (!isFocusable()) return false; // If it is not iconified, then give the focus to the text field if (!isIconified()) { boolean result = mQueryTextView.requestFocus(direction, previouslyFocusedRect); if (result) { updateViewsVisibility(false); } return result; } else { return super.requestFocus(direction, previouslyFocusedRect); } }
解决:
我要拿到mQueryTextView并且调用clearFocus(); 然后在调用SearchView.clearFocus();
首先监听软键盘弹起状态:view.getViewTreeObserver().addOnGlobalLayoutListener(); //通过给根布局View注册布局监听器
获取当前焦点所在View,判断是否是SearchView$SearchAutoComplete ,然后根据软键盘状态与当前焦点View,控制SearchView的焦点位置
Code:
void regeKeyListener(final View v) {// 注册根View布局监听,监听布局大小改变v.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {// TODO Auto-generated method stub// 获取当前焦点所在ViewView currentFocus = getActivity().getCurrentFocus();String name = currentFocus.getClass().getName();Rect outRect = new Rect();v.getWindowVisibleDisplayFrame(outRect);// 计算比例,从而判断软键盘是否弹起double dl = 1.0 * outRect.bottom / v.getMeasuredHeight();if (dl < 0.8 && name.equals("android.widget.SearchView$SearchAutoComplete")) {if (!isKeyUp) {isKeyUp = true;}} else if (isKeyUp) {currentFocus.clearFocus();mSearchView.clearFocus();isKeyUp = false;}}});}
效果:
0 0
- Android SearchView 焦点问题
- android SearchView 失去焦点
- edittext SearchView 失去焦点问题
- android SearchView
- Android SearchView
- android SearchView
- 第一次点击回退键SearchView焦点消失,再次点击退出界面,两次点击回退键问题
- android 焦点问题
- android焦点问题
- android 焦点问题
- android焦点问题
- android ListView 焦点问题
- Android焦点问题
- Android 焦点问题
- android--listview焦点问题
- Android中的焦点问题
- android TV 焦点 问题
- android TV 焦点 问题
- 米斯特白帽培训讲义(v2)漏洞篇 SQL 注入
- 安卓-用户界面-对话框
- 设置 Matlab mex 编译器
- windows下java和mysql环境变量配置
- 盘点2016:京东云助力区域打造新动能 成就新经济
- Android SearchView 焦点问题
- 终端实时显示当前分支名字
- 截取小数点 查询字段中含有数值
- C++使用MySQL-Connector/C++连接MySQL出现LNK2019错误
- LeetCode 遍历技巧 | 15. 3Sum
- php实现签到功能
- MyEclipse2015 Web项目转Maven项目
- Struts2拦截器
- js:返回到页面时滚动到上次浏览位置