Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将Edittext设置为只读并返回为可编辑_Android_Android Edittext_Readonly - Fatal编程技术网

Android 将Edittext设置为只读并返回为可编辑

Android 将Edittext设置为只读并返回为可编辑,android,android-edittext,readonly,Android,Android Edittext,Readonly,我发现了很多关于将编辑文本设置为只读或可编辑的问题,但它们都只适用于某些特定场景。 我需要以下功能: 可编辑的Edittext小部件应以编程方式设置为只读。当它为只读时,不应该可以输入数据,但当前内容应该可以选择复制。同一字段应设置为“可编辑”并恢复到与之前相同的状态,因此允许输入并选择要复制/粘贴的文本 这是我当前的代码: if (readOnly) { _text.setTextColor(Color.GRAY);

我发现了很多关于将编辑文本设置为只读或可编辑的问题,但它们都只适用于某些特定场景。 我需要以下功能:

可编辑的Edittext小部件应以编程方式设置为只读。当它为只读时,不应该可以输入数据,但当前内容应该可以选择复制。同一字段应设置为“可编辑”并恢复到与之前相同的状态,因此允许输入并选择要复制/粘贴的文本

这是我当前的代码:

        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