为啥我可以输入禁用的 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?的主要内容,如果未能解决你的问题,请参考以下文章