发布
社区首页 >问答首页 >将编辑文本设置为只读,然后再设置为可编辑

将编辑文本设置为只读,然后再设置为可编辑
EN

Stack Overflow用户
提问于 2017-08-29 13:54:29
回答 5查看 11.4K关注 0票数 2

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

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

这是我目前的代码:

代码语言:javascript
代码运行次数:0
复制
        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以表示只读状态,并将其设置为以前的状态以设置为可编辑状态。这样,在将字段设置为可编辑后,该字段是不可编辑的。

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

编辑:尝试了以下内容:Disabling of EditText in android,但只有在我不使用setTextIsSelectable()使只读文本可选的情况下,它才能工作。如果设置此值并切换回可编辑,则该字段仅可选择,但不可编辑。

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-08-29 14:52:17

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

代码语言:javascript
代码运行次数:0
复制
private void disableEditText() {
        editText.setInputType(InputType.TYPE_NULL);
        disabled = true;
}
private void enableEditText() {
        editText.setInputType(InputType.TYPE_CLASS_TEXT);
        disabled = false;
}

并在文本未禁用时每次打开键盘,并使用单击editText

代码语言:javascript
代码运行次数:0
复制
 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

希望这能帮到你

票数 9
EN

Stack Overflow用户

发布于 2018-06-20 05:17:29

bool isEnabled = false

代码语言:javascript
代码运行次数:0
复制
eidtText.Focusable= isEnabled ;
eidtText.FocusableInTouchMode = isEnabled ;
eidtText.Clickable= isEnabled ;
eidtText.LongClickable= isEnabled ;
eidtText.SetCursorVisible(checkedFalse) ;

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

票数 5
EN

Stack Overflow用户

发布于 2019-03-29 01:59:56

基于Gideon Huyo-a的答案,这是转换成Java,并可在Android上使用

代码语言:javascript
代码运行次数:0
复制
  private void EnableDisableEditText(boolean isEnabled, EditText editText) {
    editText.setFocusable(isEnabled);
    editText.setFocusableInTouchMode(isEnabled) ;
    editText.setClickable(isEnabled);
    editText.setLongClickable(isEnabled);
    editText.setCursorVisible(isEnabled) ;
}

也转换成方法只是使用

代码语言:javascript
代码运行次数:0
复制
  EnableDisableEditText(BooleanValueHere, YourEditText)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45940979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档