为啥我可以输入禁用的 EditText?

Posted

技术标签:

【中文标题】为啥我可以输入禁用的 EditText?【英文标题】:Why can I type into a disabled EditText?为什么我可以输入禁用的 EditText? 【发布时间】:2010-10-28 23:59:30 【问题描述】:

如果我使用禁用 EditText 小部件

editText.setEnabled(false);

我仍然可以使用屏幕输入法(在模拟器和 G1 上)输入它。这是故意的吗?我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我注意到您无法通过点击禁用的 EditText 来激活屏幕键盘,而且 DEL 键也不起作用,所以这对我来说似乎是一个错误。我在 android 问题跟踪器中将其归档为 issue 2771。

【讨论】:

【参考方案2】:
edittext.setKeyListener(null);

这对你有帮助

【讨论】:

这很好,因为它可以防止键盘出现。【参考方案3】:

使用这个,它对我有用

setFocusableInTouchMode(boolean);

setFocusable(boolean);

【讨论】:

【参考方案4】:

我修复了这个问题,但补丁只包含在 Honeycomb 中。这就是为什么我创建了一个小项目,其中将包含我从 2.1 开始的版本的反向移植修复。它包含对错误 2771 的修复:http://code.google.com/p/android-fixes/ 您可以从 svn 中查看“库”并将其包含在您的项目中。然后代替 android.widget.EditText 导入 edu.ubbdroid.android.widget.EditText (它扩展了原始的EditText),问题应该消失了:)

【讨论】:

【参考方案5】:

也许您可以选择动态替换为 TextView 并返回。但您可能需要调整字体以匹配 EditText。

【讨论】:

【参考方案6】:
etComment.setEnabled(flag);
etComment.setFocusable(flag);
etComment.setFocusableInTouchMode(flag);
if (flag) 
    etComment.requestFocus();

etComment.setFilters(new InputFilter[]  new InputFilter() 
    @Override
    public CharSequence filter(
        CharSequence source, int start, int end, Spanned dest, int dstart, int dend) 
            if (!flag) 
                return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
            
            return null;
        
    
);

为所有人 你可以得到它!

【讨论】:

【参考方案7】:

我认为您应该能够使用自己的函数编辑Text.setOnClickListener() 并调用 super.onClickListener() 如果您想要编辑文本。

编辑: 以下链接有一些听起来更正确的答案:Can we have uneditable text in edittext

【讨论】:

我知道,我在那里提供了一个答案:) 这个问题不是关于 如何 使其不可编辑,而是 why setEnabled( false) 仍然允许修改。我想知道我是否弄错了启用小部件的概念。

以上是关于为啥我可以输入禁用的 EditText?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中禁用 EditText

Android实现EditText禁止输入换行符但可以根据内容自动换行的解决方法

用户输入后禁用edittext searchview

Android 工作问题解决记录

Android文本输入框EditText禁用分号

长按时启用 EditText(或按钮)