Android 将Edittext设置为只读并返回为可编辑
我发现了很多关于将编辑文本设置为只读或可编辑的问题,但它们都只适用于某些特定场景。 我需要以下功能: 可编辑的Edittext小部件应以编程方式设置为只读。当它为只读时,不应该可以输入数据,但当前内容应该可以选择复制。同一字段应设置为“可编辑”并恢复到与之前相同的状态,因此允许输入并选择要复制/粘贴的文本 这是我当前的代码:Android 将Edittext设置为只读并返回为可编辑,android,android-edittext,readonly,Android,Android Edittext,Readonly,我发现了很多关于将编辑文本设置为只读或可编辑的问题,但它们都只适用于某些特定场景。 我需要以下功能: 可编辑的Edittext小部件应以编程方式设置为只读。当它为只读时,不应该可以输入数据,但当前内容应该可以选择复制。同一字段应设置为“可编辑”并恢复到与之前相同的状态,因此允许输入并选择要复制/粘贴的文本 这是我当前的代码: if (readOnly) { _text.setTextColor(Color.GRAY);
if (readOnly)
{
_text.setTextColor(Color.GRAY);
_keyListener = _text.getKeyListener();
_text.setKeyListener(null);
}
else
{
_text.setTextColor(_foreground);
if (_keyListener != null)
{
_text.setKeyListener(_keyListener);
}
_text.setFocusable(true);
}
我已经尝试了以下方法:
在只读部分中调用setTextIsSelectable。这允许在只读字段中选择文本。但如果我将其更改回“可编辑”,则该字段仍然只能选择。
对于只读状态,将inputtype设置为null,并将其设置回上一个状态以将其设置为可编辑。这样,在将字段设置回可编辑状态后,该字段将不可编辑。
我想我忘了设置某种侦听器或属性。也许你们中有人知道那是哪一个
编辑:
尝试了以下操作:
但它只在我不使用setTextIsSelectable使只读文本可选择时起作用。如果设置此值并切换回可编辑,则该字段仅可选择,但不可编辑
谢谢使用此参数android:textIsSelectable=true android:inputType=none android:editable不推荐使用
或以编程方式
editText.setInputTypeInputType.TYPE\u空;editText.setTextIsSelectabletrue
如果这不起作用,您可以尝试一些定制的方法,首先在xml中使用android:textIsSelectable=true,然后定义两个方法
并在每次文本未禁用时打开键盘,然后使用“单击”编辑文本
别忘了定义布尔禁用
希望这对您有所帮助
工作和测试!这是来自xamarin c的,但您可以根据Gideon Huyo-a的回答,通过在某些代码中添加前缀集,轻松地在java中转换它。这已转换为java,可在Android Studio上使用
private void EnableDisableEditText(boolean isEnabled, EditText editText) {
editText.setFocusable(isEnabled);
editText.setFocusableInTouchMode(isEnabled) ;
editText.setClickable(isEnabled);
editText.setLongClickable(isEnabled);
editText.setCursorVisible(isEnabled) ;
}
也转换成了只需使用的方法
EnableDisableEditText(BooleanValueHere, YourEditText)
您可以启用和禁用编辑文本,这将阻止通过以下方式编辑文本:
editText.isEnabled = true
editText.isEnabled = false
您可以在xml文件中使用android:enabled=false进行只读
或使用:
txtEditetext.isEnabled=false表示只读
和txtEditetext.isEnabled=true对于编辑文本可能重复的不幸不起作用,请参阅我的编辑。如果没有其他功能起作用,您可以尝试使用两个不同的小部件,只显示相关的小部件。只读时显示TextView,可编辑时显示EditText,隐藏时使用TextWatchers使其保持同步。@cwbowron:谢谢这种可能性。我尽量避免每个字段有多个窗口小部件,但如果没有其他窗口小部件,我将采用此解决方案。不幸的是,这不起作用。我可以用这个设置字段为disabled,但我不知道如何再次设置doenabled。几乎就是这样。我做了两个更改:使用onFocusListener而不是onClickListener,以防止必须在同一字段上单击两次才能打开键盘。第二个更改:使用imm.showsofInputItemText、InputMethodManager.SHOW\u强制;而不是imm.toggleSoftInput,以防止单击其他字段时关闭键盘。你能做这些修改吗,这样我就可以把这个答案设置为可接受的答案。我做了修改:谢谢……虽然我认为onClickListener是一个更好的解决方案,当你看不到任何其他项目时,为了改变你的焦点:嗯,是的。如果关闭键盘,则在焦点改变之前无法再次打开。我认为这两种解决方案都有缺点。也许有更好的,但现在,这对我来说很有用
private void EnableDisableEditText(boolean isEnabled, EditText editText) {
editText.setFocusable(isEnabled);
editText.setFocusableInTouchMode(isEnabled) ;
editText.setClickable(isEnabled);
editText.setLongClickable(isEnabled);
editText.setCursorVisible(isEnabled) ;
}
EnableDisableEditText(BooleanValueHere, YourEditText)
editText.isEnabled = true
editText.isEnabled = false