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

时间:2017-08-29 13:54:30

标签: android android-edittext readonly

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

可编辑的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()。这使得能够在只读字段中选择文本。但如果我将其更改回可编辑状态,则该字段仍然只能选择。
  • 将readtype设置为null,并将其设置回先前状态以将其设置为可编辑状态。这样,在将字段设置回可编辑后,该字段无法编辑。

我想我忘了设置某种听众或财产。也许你们其中一个人知道是哪一个。

编辑: 尝试以下方法: Disabling of EditText in android 但只有在我不能使用setTextIsSelectable()使readonly文本可选时,它才有效。如果我设置此值并切换回可编辑状态,则该字段仅可选,但不可编辑。

由于

5 个答案:

答案 0 :(得分:3)

使用此参数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;
}

每当文本被禁用时打开键盘并使用点击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);
            }
        }
    });

不要忘记定义boolean disabled

希望这对你有帮助

答案 1 :(得分:2)

bool isEnabled = false

eidtText.Focusable= isEnabled ;
eidtText.FocusableInTouchMode = isEnabled ;
eidtText.Clickable= isEnabled ;
eidtText.LongClickable= isEnabled ;
eidtText.SetCursorVisible(checkedFalse) ;

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

答案 2 :(得分:0)

基于Gideon Huyo-a的答案,该代码已转换为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)

答案 3 :(得分:0)

您可以启用和禁用编辑文本,这样将阻止编辑文本

mystring = mystring.replace(r'\n', ' ').replace(r'\r', '')

答案 4 :(得分:-2)

您可以在 xml 文件中使用 android:enabled="false" 进行只读 或使用:

txtEditetext.isEnabled =false 只读
txtEditetext.isEnabled = true 用于编辑文本