Dialog自定义键盘禁止显示软键盘,显示光标
今天要改一个需求,在对话框中定义了一个软键盘,软键盘绑定了Editext,当点击产生对话框时要求不能显软键盘,只显示光标。我查看了很多博客,显示光标且不弹出软键盘的一般方法如下:
/**
* 设置光标显示,软件盘隐藏的方法
* */
public static void hideSoftInputMd(EditText ed, Activity activity) {
activity.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
int currentVersion = android.os.Build.VERSION.SDK_INT;
String methodName = null;
if (currentVersion >= 16) {
// 当为4.2
methodName = "setShowSoftInputOnFocus";
} else if (currentVersion >= 14) {
// 当为4.0
methodName = "setSoftInputShownOnFocus";
}
if (methodName == null) {
ed.setInputType(InputType.TYPE_NULL);
} else {
Class<EditText> clazz = EditText.class;
Method setShowSoftInputOnFocus;
try {
setShowSoftInputOnFocus = clazz.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();
}
}
}
平时实现的方式
在父容器中增加以下两行代码:
android:focusableInTouchMode=“true”
android:focusable=“true”
这个方式会禁止软键盘弹出,但是需要触发Editext,软键盘才会弹出,这个效果可以用于对应的需求
经验之谈
如果在Eidtext中如果还有其他要求,比如去除复制,比如长按也会出现软件盘,或者点击也要禁用软件盘等,可以尝试重写点击事件,然后在事件中去隐藏软件盘(可以尝试下,我只尝试了点击隐藏)
我的解决方法
在对话框中如果要达到这个效果,就需要使用延时隐藏,这个思维就式利于软件的特性,当app弹窗后软键盘因为焦点弹出,但是我可以在100ms内将齐隐藏,这个隐藏是平时常用的关闭软键盘的方式
/**
* 隐藏软键盘
* @param view
*/
public static void hideSoftKeyboard(View view) {
Context context = view.getContext();
InputMethodManager imm = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
这个方法在这里并不会隐藏光标,同时达到我要的效果
今天解决了两个多小时,记录一下,如果能帮助到大家的给个赞哦