android中EditText有光标不弹出软键盘处理
当我们点击Edittext时(获得焦点),都会弹出系统默认的软键盘,在有时候会需要做到点击EditText不想显示软键盘,这时候我们就要想方法把软键盘给你从隐藏掉。有几种方法
方法一:在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden。(但是还是会弹出软键盘)
方法二:强制隐藏Android输入法窗口(此方法mouse在EditText中输入文本时会自动换行,但是会弹出软键盘)还有一个方法是这样的imm.toggleSoftInput(0, InputMethodManager.HIDENOTALWAYS);当软键盘已经弹出,调用该方法就是隐藏软键盘;没有弹出软键盘,就是显示软键盘。
方法三:(此方法EditText始终不弹出软件键盘 ,但光标也会隐藏)
方法四:这种方法就是我找了好久想要的。既能够有光标的显示,又不能弹出软键盘。
3.0以下版本可以用editText.setInputType(InputType.TYPE_NULL)来实现。或者设置editText.setKeyListener(null)来实现.
3.0以上版本除了调用隐藏方法:setShowSoftInputOnFocus(false),由于是系统内部方法。无法直接调用,所以采用反射的方式来进行调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
phoneNumber = (EditText) rootView.findViewById(R.id.numbers); if (android.os.Build.VERSION.SDK_INT <= 10) { phoneNumber.setInputType(InputType.TYPE_NULL); } else { getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); try { Class<EditText> cls = EditText.class; Method setSoftInputShownOnFocus; setSoftInputShownOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class); setSoftInputShownOnFocus.setAccessible(true); setSoftInputShownOnFocus.invoke(phoneNumber, false); } catch (Exception e) { e.printStackTrace(); } } 注: 上面反射的方法是从TextView的源码中找到的。因为EditText是继承TextView,看网上据说有的sdk里面是"setSoftInputShownOnFocus",反正具体是跟自己的sdk相对应就可以了。4.0系统对应设置的是setShowSoftInputOnFocus,4.2系统对应设置的是setSoftInputShownOnFocus,这两个版本的都测试过了,是正确可用的。 |
补充: 设置setFocusableInTouchMode(false)也可以不弹出软键盘;
光标相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
setSelection(index); // 设置光标到index int index = editText.getSelectionStart(); // 获取光标位置 设置光标颜色的属性: android:textCursorDrawable="@drawable/color_cursor" 隐藏光标的属性: android:cursorVisible="false" <!-- color_cursor.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <size android:width="1dp" /> <solid android:color="#ff000000" /> </shape> --> //在光标处插入字符 int index = editText.getSelectionStart(); Editable editable = editText.getText(); editable.insert(index, "aaaa"); //删除光标前字符 int index = editText.getSelectionStart(); Editable editable = editText.getText(); editable.delete(index-1, index); |
0 Comments