EditText不使用系统软键盘(但是不印象其他功能,通过反射)
来源:互联网 发布:java 日志 编辑:程序博客网 时间:2024/06/08 06:40
最近在看EditText的源码,有人问到如果不使用系统的软键盘,在网上看了下资料,发现对于这个问题的解决都比较的浅薄,没有深入到源码层面。
都是通过设置activity中软键盘设置,或者是设置EditText的inputType这些属性,但是都是只能实现部分功能,而且会影响本来EditText的光标已经插入等等功能。
在看过源码以后对软键盘特别留意了下,发现软键盘的弹出只是通过一个boolean值来进行控制。
看弹出软键盘的源码:
if (touchIsFinished && (isTextEditable() || textIsSelectable)) { // Show the IME, except when selecting in read-only text. final InputMethodManager imm = InputMethodManager.peekInstance(); viewClicked(imm); if (!textIsSelectable && mEditor.mShowSoftInputOnFocus) { handled |= imm != null && imm.showSoftInput(this, 0); } // The above condition ensures that the mEditor is not null mEditor.onTouchUpEvent(event); handled = true; }
这是TextView的onTouch中的一段代码(因为EditText继承自TextView,但是基本没有实现什么方法,所有的功能TextView以及实现)
通过上变的代码我们可以发现,是否显示软件盘是通过
textIsSelectable 以及 mEditor.mShowSoftInputOnFocus来进行控制的,但是
textIsSelectable修改以后会影响插入光标的功能,所以只能修改mEditor.mShowSoftInputOnFocus
而修改这个就很简单了,通过凡是就可以做到:
下边是反射的代码:(亲测有效,只屏蔽了软键盘)
/** * 设置EditTextView不显示软键盘 * @param editText */ public static void setEditTextViewNoSoftInput(EditText editText){ Class cls = editText.getClass().getSuperclass(); LogUtils.e("edit", "==========="+ cls.getSuperclass()); Class textCls = cls.getSuperclass(); try { Field field = textCls.getDeclaredField("mEditor"); LogUtils.e("edit", "field==" + field.getName()); field.setAccessible(true); Object editObj = field.get(editText); Class cls_edit = editObj.getClass(); Field focus_field = cls_edit.getDeclaredField("mShowSoftInputOnFocus"); focus_field.setAccessible(true); Object focus_obj = focus_field.get(editObj); LogUtils.e("edit",focus_obj + ""); focus_field.set(editObj,false); } catch (NoSuchFieldException e) { LogUtils.e("edit", "===========" + e.getMessage()); e.printStackTrace(); } catch (IllegalAccessException e) { LogUtils.e("edit", "===========" + e.getMessage()); e.printStackTrace(); }}
阅读全文
0 0
- EditText不使用系统软键盘(但是不印象其他功能,通过反射)
- 【笔记】Edittext禁用软键盘,但不影响其他功能
- edittext不弹出软键盘
- Edittext不弹出软键盘
- edittext不弹出软键盘
- EditText不弹出软键盘
- Android edittext使用自定义键盘时禁用系统软键盘但却不禁用光标
- EditText 基本用法(不弹出软键盘)
- 点击EditText不弹出软键盘
- android edittext不弹出软键盘
- android edittext不弹出软键盘
- android edittext不弹出软键盘
- android edittext不弹出软键盘
- EditText默认不弹出软键盘
- android edittext不弹出软键盘
- EditText不自动弹出软键盘
- android EditText不自动弹出软键盘
- android设置EditText不弹出软键盘
- Windows系统下搭建Redis
- MVP框架
- Jedis相关操作api---哈希
- 使用HttpComponents抓取网页内容
- OGG-01044 错误
- EditText不使用系统软键盘(但是不印象其他功能,通过反射)
- 理解 Android Build 系统
- java 直接读数据库下载文件(省略写入本地文件过程)
- DTD 和XSD 区别
- 笔杆网查重
- java集合类
- shell传参
- 斐波那契数列系列问题,题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- mysql.gtid_executed表的更新机制