我们可以在XML布局中设置EditText
的可编辑属性,但不能在程序中进行设置,但是却没有setEditable()
方法!
如果EditText
未启用 [setEnabled(false)
],它仍然是可编辑的!
我们可以在XML布局中设置EditText
的可编辑属性,但不能在程序中进行设置,但是却没有setEditable()
方法!
如果EditText
未启用 [setEnabled(false)
],它仍然是可编辑的!
这可能有帮助:
if (cbProhibitEditPW.isChecked()) { // disable editing password
editTextPassword.setFocusable(false);
editTextPassword.setFocusableInTouchMode(false); // user touches widget on phone with touch screen
editTextPassword.setClickable(false); // user navigates with wheel and selects widget
isProhibitEditPassword= true;
} else { // enable editing of password
editTextPassword.setFocusable(true);
editTextPassword.setFocusableInTouchMode(true);
editTextPassword.setClickable(true);
isProhibitEditPassword= false;
}
通过editText.getKeyListener()
获取EditText
的KeyListener值,存储在KeyListener类型变量中,该变量将包含可编辑属性值:
KeyListener variable;
variable = editText.getKeyListener();
将 EditText
的 Editable 属性设置为 false,如下所示:
edittext.setKeyListener(null);
现在将 EditText
的 Editable 属性设置为 true:
editText.setKeyListener(variable);
注意:在XML中,EditText
的默认可编辑属性应为true。
如何以编程方式完成:
要启用EditText,请使用:
et.setEnabled(true);
禁用EditText,请使用以下代码:
et.setEnabled(false);
一旦编辑文本失去焦点,即使您将其重新设置为可聚焦状态,也不能再键入内容。
以下是一个解决方法:
if (someCondition)
editTextField.setFocusable(false);
else
editTextField.setFocusableInTouchMode(true);
setFocusableInTouchMode()
中将其设置为 true 似乎可以解决问题。edittext1.setKeyListener(null);
edittext1.setCursorVisible(false);
edittext1.setPressed(false);
edittext1.setFocusable(false);
setInputType(InputType.TYPE_NULL)
,因为其他一些解决方案也会禁用滚动和编辑。 - David O'MearaeditText.setInputType(InputType.TYPE_NULL);
EditText editText=(EditText)findViewById(R.id.editText1);
editText.setKeyListener(null);
它可以正常工作...
你可以尝试这个方法,对我来说很有效。
EditText.setInputType(0);
EditText.setFilters(new InputFilter[] {new InputFilter()
{
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend)
{
return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
}
}
});
由于 setEditable(false)
已经被弃用,我们无法在程序中使用它,因此可以使用另一种方法来解决问题,即使用 setInputType(InputType.TYPE_NULL)
这意味着我们更改了编辑文本的输入类型。我们将其设置为 NULL,因此它不可编辑。
以下示例可能会有所帮助(我在 Fragment 的 onCreateView 方法中编写了此代码):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.yourfragment, container, false);
EditText sample = view.findViewById(R.id.youredittext);
sample.setInputType(InputType.TYPE_NULL);
UI.setReadOnly(myEditText, true)
。需要设置一些属性,您可以在源代码中查看。 - caw