2017-08-29 135 views
0

我发现了许多关于将编辑文本设置为只读或可编辑的问题,但所有这些问题仅适用于某些特定方案。 我需要以下功能:将Edittext设置为只读并返回到可编辑

可编辑的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,并将其设置回以前的状态以将其设置为可编辑状态。有了这个,该字段在设置回可编辑状态后不可编辑。

我想我忘了设置某种类型的监听器或属性。也许你们中的一个知道那是哪一个。

编辑: 试过如下: Disabling of EditText in android 但只要我不会用setTextIsSelectable()使只读文本选择它才会起作用。如果我设置该值并切换回可编辑状态,则该字段仅可选,但不可编辑。

感谢

+0

可能的复制时间[在Android中禁用EditText](https://stackoverflow.com/questions/4297763/disabling-of-edittext-in-android) –

+0

不幸的是没有工作,请参阅我的编辑。 – Roman

+1

如果没有别的工作,你可以尝试使用两个不同的小部件,并只显示相关的一个。在只读时显示TextView,在编辑时显示EditText,并在隐藏时使用TextWatchers保持同步。 – cwbowron

回答

2

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

希望这是帮助你

+0

不幸的是,这是行不通的。我可以设置禁用这个字段,但我不知道如何设置它再次启用。 – Roman

+0

我编辑我的答案,请检查! –

+0

这是差不多的。我进行了两项更改:使用onFocusListener而不是onClickListener,以防止在同一字段上单击两次以打开键盘。第二次更改:使用imm.showSoftInput(editText,InputMethodManager.SHOW_FORCED);而不是imm.toggleSoftInput()来防止在单击另一个字段时关闭键盘。你能做这些改变吗,所以我可以将这个答案设置为接受的答案。 – Roman