Android Dialog自定义键盘禁止显示软键盘,显示光标

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);
    }

这个方法在这里并不会隐藏光标,同时达到我要的效果

今天解决了两个多小时,记录一下,如果能帮助到大家的给个赞哦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值