如何在Android程序中以编程方式设置可编辑的true/false EditText?

37

我们可以在XML布局中设置EditText的可编辑属性,但不能在程序中进行设置,但是却没有setEditable()方法!

如果EditText未启用 [setEnabled(false)],它仍然是可编辑的


1
EditText.setEnabled(false); 如果你设置了这个,那么编辑框就会被禁用。100%。 - RobinHood
怎么可能,我已经检查过了,它禁用了你的编辑框。 - RobinHood
是的,它可能被禁用,但我们无法使用它来复制该编辑文本的值。 - Niranj Patel
最可靠的方法是使用此库中的UI.setReadOnly(myEditText, true)。需要设置一些属性,您可以在源代码中查看。 - caw
可能是如何在代码中复制android:editable =“false”?的重复问题。 - Ciro Santilli OurBigBook.com
14个回答

52

这可能有帮助:

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;
}

在禁用编辑文本框后,它仍然会接收键盘事件。结合下面Sumit Sonome的答案,使其完全不可编辑。 - Thecarisma

23

9

通过editText.getKeyListener()获取EditTextKeyListener值,存储在KeyListener类型变量中,该变量将包含可编辑属性值:

KeyListener variable;
variable = editText.getKeyListener(); 

EditText 的 Editable 属性设置为 false,如下所示:

 edittext.setKeyListener(null);

现在将 EditText 的 Editable 属性设置为 true:

editText.setKeyListener(variable);  

注意:在XML中,EditText的默认可编辑属性应为true。


7

如何以编程方式完成:

要启用EditText,请使用:

et.setEnabled(true);

禁用EditText,请使用以下代码:

et.setEnabled(false);

5

一旦编辑文本失去焦点,即使您将其重新设置为可聚焦状态,也不能再键入内容。

以下是一个解决方法:

if (someCondition)
   editTextField.setFocusable(false);
else
   editTextField.setFocusableInTouchMode(true);

setFocusableInTouchMode() 中将其设置为 true 似乎可以解决问题。

setFocusableInTouchMode 使触摸模式下可聚焦 save my day! 谢谢你救了我一天! - ulaserdegor

5
希望以下内容能帮助你:
edittext1.setKeyListener(null);
edittext1.setCursorVisible(false);
edittext1.setPressed(false);
edittext1.setFocusable(false);

这是我首选的解决方案,再加上 setInputType(InputType.TYPE_NULL),因为其他一些解决方案也会禁用滚动和编辑。 - David O'Meara

5
editText.setInputType(InputType.TYPE_NULL);

1
请提供更多细节说明为什么这将解决问题。 - Wand Maker

4
请尝试以下内容:
EditText editText=(EditText)findViewById(R.id.editText1);

editText.setKeyListener(null);

它可以正常工作...


2

你可以尝试这个方法,对我来说很有效。

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) : "";

}
}
});

1

由于 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);

希望这能解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接