将 Edittext 设置为只读并恢复为可编辑
Set an Edittext to read only and back to editable
我发现了很多关于将编辑文本设置为只读或可编辑的问题,但所有问题都只适用于某些特定情况。
我需要以下功能:
可编辑的 Edittext 小部件应以编程方式设置为只读。 readonly时,应该不能输入数据,但当前内容应该select可以复制。同一字段应设置回与以前相同的可编辑状态,因此允许输入 select copy/paste.
的文本
这是我当前的代码:
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()
。这会在只读字段中启用 selection 文本。但是,如果我将其改回可编辑,该字段仍然只能select可用。
- 将只读状态的输入类型设置为空,并将其设置回之前的状态以将其设置为可编辑。有了这个,字段在设置回可编辑后不可编辑。
我想我忘了设置某种监听器或 属性。也许你们中有人知道那是哪一个。
编辑:
尝试了以下内容:
Disabling of EditText in android
但它仅在我不使用 setTextIsSelectable()
使只读文本 select 可用时才有效。如果我设置此值并切换回可编辑,则该字段仅 select 可用,但不可编辑。
谢谢
使用此参数 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
希望对您有所帮助
bool isEnabled = false
eidtText.Focusable= isEnabled ;
eidtText.FocusableInTouchMode = isEnabled ;
eidtText.Clickable= isEnabled ;
eidtText.LongClickable= isEnabled ;
eidtText.SetCursorVisible(checkedFalse) ;
工作和测试!这是来自 xamarin c#,但您可以通过向某些代码
添加前缀 "Set" 轻松地将其转换为 java
根据 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)
您可以启用和禁用编辑文本,这将阻止
编辑文本
editText.isEnabled = true
editText.isEnabled = false
您可以使用 xml 文件中的 android:enabled="false"
只读
或使用:
txtEditetext.isEnabled =false
只读
txtEditetext.isEnabled = true
用于编辑文本
我发现了很多关于将编辑文本设置为只读或可编辑的问题,但所有问题都只适用于某些特定情况。 我需要以下功能:
可编辑的 Edittext 小部件应以编程方式设置为只读。 readonly时,应该不能输入数据,但当前内容应该select可以复制。同一字段应设置回与以前相同的可编辑状态,因此允许输入 select copy/paste.
的文本这是我当前的代码:
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()
。这会在只读字段中启用 selection 文本。但是,如果我将其改回可编辑,该字段仍然只能select可用。 - 将只读状态的输入类型设置为空,并将其设置回之前的状态以将其设置为可编辑。有了这个,字段在设置回可编辑后不可编辑。
我想我忘了设置某种监听器或 属性。也许你们中有人知道那是哪一个。
编辑:
尝试了以下内容:
Disabling of EditText in android
但它仅在我不使用 setTextIsSelectable()
使只读文本 select 可用时才有效。如果我设置此值并切换回可编辑,则该字段仅 select 可用,但不可编辑。
谢谢
使用此参数 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
希望对您有所帮助
bool isEnabled = false
eidtText.Focusable= isEnabled ;
eidtText.FocusableInTouchMode = isEnabled ;
eidtText.Clickable= isEnabled ;
eidtText.LongClickable= isEnabled ;
eidtText.SetCursorVisible(checkedFalse) ;
工作和测试!这是来自 xamarin c#,但您可以通过向某些代码
添加前缀 "Set" 轻松地将其转换为 java根据 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)
您可以启用和禁用编辑文本,这将阻止
编辑文本editText.isEnabled = true
editText.isEnabled = false
您可以使用 xml 文件中的 android:enabled="false"
只读
或使用:
txtEditetext.isEnabled =false
只读
txtEditetext.isEnabled = true
用于编辑文本