在Android EditText开发中经常可能需要一些自定义软键盘的功能,并且能够显示EditText闪烁光标,但这个时候又不希望弹出系统软键盘,该怎么办呢?
步骤一:如何显示EditText的闪烁光标呢?
首先我们需要设置EditText为可聚焦状态,并且显示闪烁光标,需要先在XML中添加如下代码:
//设置可获取焦点 android:focusable="true" android:focusableInTouchMode="true" //显示闪烁光标,为“@null”表示显示系统默认闪烁光标 android:textCursorDrawable="@null" android:cursorVisible="true"
步骤二:禁止EditText系统软键盘:
EditText如何禁止系统软键盘呢?错误做法!!!
很多人说直接在代码中添加如下代码来禁止系统键盘,如下所示:
editText.setInputType(InputType.TYPE_NULL);
这种方式是错误的,虽然看起来简单粗暴,但是如果你这样禁止EditText系统软键盘,就会造成EditText无法获取焦点,也就不能显示EditText闪烁光标了。
禁止EditText系统软键盘并使光标正常显示的方法,正确方式!!!
public void disableSoftInput(EditText editText){ if (android.os.Build.VERSION.SDK_INT <= 10) { editText.setInputType(InputType.TYPE_NULL); } else { Class<EditText> cls = EditText.class; Method method; try { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); method = cls.getMethod("setShowSoftInputOnFocus",boolean.class); method.setAccessible(true); method.invoke(editText, false); }catch (Exception e) { // TODO: handle exception } } }
上述代码只需要传入要禁止软键盘的EditText对象参数进去即可轻松实现:既能禁止系统软键盘,又能正常显示闪烁光标的问题了。