将Edittext设置为只读,然后恢复为可编辑

Rom*_*man 0 android readonly android-edittext

我发现了许多有关将编辑文本设置为readOnly或可编辑的问题,但是所有这些问题仅适用于某些特定情况。我需要以下功能:

可编辑的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);
        }
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下方法:

  • 调用setTextIsSelectable()只读部分。这样可以在只读字段中选择文本。但是,如果我将其更改回可编辑状态,则该字段仍然只能选择。
  • 对于只读状态,将输入类型设置为null,然后将其设置回先前的状态,以将其设置为可编辑状态。这样,将该字段重新设置为可编辑后,该字段不可编辑。

我想我忘记设置某种侦听器或属性。也许你们当中的一个知道那是哪一个。

编辑:尝试以下操作: 在android中禁用EditText, 但它仅在我不会使用setTextIsSelectable()来使只读文本变为可选择状态时才有效。如果我设置了该值并切换回可编辑状态,则该字段只能选择,而不能编辑。

谢谢

L.P*_*yan 5

使用此参数 android:textIsSelectable="true" android:inputType="none"android:editable不建议使用)

或以编程方式

editText.setInputType(InputType.TYPE_NULL); editText.setTextIsSelectable(true);

如果这不起作用,您可以尝试一些自定义方法,首先使用android:textIsSelectable =“ true”in your xml, after define two methods

private void disableEditText() {
        editText.setInputType(InputType.TYPE_NULL);
        disabled = true;
}
private void enableEditText() {
        editText.setInputType(InputType.TYPE_CLASS_TEXT);
        disabled = false;
}
Run Code Online (Sandbox Code Playgroud)

并在每次也不禁用文本时打开键盘,并使用click来 editText

 editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean b) {
            if (!disabled) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

而且不要忘了定义 boolean disabled

希望这对你有帮助


小智 5

bool isEnabled = false

eidtText.Focusable= isEnabled ;
eidtText.FocusableInTouchMode = isEnabled ;
eidtText.Clickable= isEnabled ;
eidtText.LongClickable= isEnabled ;
eidtText.SetCursorVisible(checkedFalse) ;
Run Code Online (Sandbox Code Playgroud)

工作和测试!这是来自 xamarin c#,但您可以通过在某些代码中添加前缀“Set”来轻松地在 Java 中转换它