【笔记】Edittext禁用软键盘,但不影响其他功能
来源:互联网 发布:淘宝账号被永久限制 编辑:程序博客网 时间:2024/05/21 10:34
最近遇到一个需求,就是需要禁用Edittext的软键盘弹出,但是又不能影响,光标显示和复制粘贴功能。
一般情况下,禁用软件盘的话,只要在Edittext的XML布局文件中加入
android:focusable="false"
但是,这虽然实现了不弹出软键盘,可以使用自定义键盘的需求,却带来别的问题:光标不见了,不能复制粘贴了!虽然自己写一个复制粘贴的方法并不难,但是在发现微信电话本居然可以实现这样的功能之后,我觉得还是使用其自带功能更稳妥,所以积极寻求,有没有什么方法可以使禁用软件盘和Edittext的自带功能不冲突。
我到处找解决方案,虽然找到和我有类似需求的,但尝试后结果不尽如人意,在edittext获取到焦点之后,软件盘还是会弹出。也有想过直接监听并重写onFocus,软件盘虽然能收回,但是还是会在页面中一闪而过,这显然是不符合要求的。
最后是在CSDN中找到了可以实现的方法:
public void hideSoftInputMethod(EditText ed) {getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);int currentVersion = android.os.Build.VERSION.SDK_INT;String methodName = null;if (currentVersion >= 16) {// 4.2methodName = "setShowSoftInputOnFocus";} else if (currentVersion >= 14) {// 4.0methodName = "setSoftInputShownOnFocus";}if (methodName == null) {ed.setInputType(InputType.TYPE_NULL);} else {Class<EditText> cls = EditText.class;Method setShowSoftInputOnFocus;try {setShowSoftInputOnFocus = cls.getMethod(methodName,boolean.class);setShowSoftInputOnFocus.setAccessible(true);setShowSoftInputOnFocus.invoke(ed, false);} catch (NoSuchMethodException e) {ed.setInputType(InputType.TYPE_NULL);e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}}
其实,我发现,这比我一开始尝试的方案仅仅多了一个兼容性问题,4.2以上的系统和4.0到4.2以下系统之间的一个方法名变了!!!我之前一直是使用的setShowSoftInputOnFocus,而我的测试机是4.0.4的系统,还是会弹出软键盘,所以点击移动光标位置的时候还是会弹出软键盘!
最后,就是实现在光标指定位置插入或删除字符了:
/** * 删除字符 */private void deleteNumber() {// TODO Auto-generated method stub//String text = edt_number.getText().toString().trim();//int locationStart = edt_number.getSelectionStart();//Logger.i("deleteNumber", "locationStart="+locationStart);//String start=text.substring(0, locationStart-1);//String end="";//if (text != null && text.length() > 1) {//if (locationStart<text.length()) {//end=text.substring(locationStart, text.length());//}//edt_number.setText(start+end);//edt_number.setSelection(locationStart - 1);//} else {//edt_number.setText("");//}int index = edt_number.getSelectionStart(); Editable editable = edt_number.getText(); editable.delete(index-1, index); }
/*** 设置et_number输入的数字 * * @param number */private void setSearchNumber(String number) {int startIndex = edt_number.getSelectionStart();int endIndex = edt_number.getSelectionEnd();Logger.i("setSearchNumber", "startIndex="+startIndex+",endIndex="+endIndex);Editable editable = edt_number.getText(); editable.insert(startIndex, number); }
这里面包含的两种方法,注释掉的是我一开始写的方法,过于繁琐,之后又在网上找到了一个更简便的方法,使用Editable只要三行就能搞定!
参考链接:
http://blog.csdn.net/centralperk/article/details/8548075
http://bbs.csdn.net/topics/360072233
0 0
- 【笔记】Edittext禁用软键盘,但不影响其他功能
- Android edittext使用自定义键盘时禁用系统软键盘但却不禁用光标
- EditText上禁用软键盘,但仍然允许复制/粘贴
- EditText上禁用软键盘,但仍然允许复制/粘贴
- EditText不使用系统软键盘(但是不印象其他功能,通过反射)
- android edittext 禁用软键盘调用
- edittext不弹出软键盘
- Edittext不弹出软键盘
- edittext不弹出软键盘
- EditText不弹出软键盘
- 完美解决EditText屏蔽软键盘输入法及不影响密码输入的格式
- EditText不自动获得输入焦点(以及 获得焦点但不弹出输入法软键盘的方法)
- EditText不自动获得输入焦点(以及 获得焦点但不弹出输入法软键盘的方法)
- 点击EditText不弹出软键盘
- android edittext不弹出软键盘
- android edittext不弹出软键盘
- android edittext不弹出软键盘
- android edittext不弹出软键盘
- Swift教程之运算符
- eclipse菜单没有Android Virtual Device Manager
- Sublime Text 3 快捷键精华版
- 布局之五 -- GridLayout
- 【JavaWeb程序设计】完成大作业的时候的一些功能实现
- 【笔记】Edittext禁用软键盘,但不影响其他功能
- 浅谈大型网站动态应用系统架构
- 天声人語 20150710
- C# 中使用 Obsolete 标志 代码过期
- ASIHTTPRequest報錯解決辦法
- 黑马程序员——Java基础--网络编程
- Maven编译打包项目 mvn clean install 遇到的错误
- Android Jni NDK 打印log日志
- 重新开始