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

问题描述 投票:0回答:14

我们可以在 XML 布局中设置

EditText
的可编辑属性,但不能以编程方式设置,但没有
setEditable()
方法!

如果

EditText
不是 Enabled [ by
setEnabled(false)
] 它仍然 可编辑

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

23
投票

我用更简单的方法做到了,setEditable 和 setFocusable false。但你应该检查一下。

如何在代码中复制 android:editable="false" ?


9
投票

通过EditText获取

editText.getKeyListener()
KeyListener
值 并存储在 KeyListener 类型变量中,其中将包含 可编辑属性值:

KeyListener variable;
variable = editText.getKeyListener(); 

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

 edittext.setKeyListener(null);

现在将

EditText
的 Editable 属性设置为 true :

editText.setKeyListener(variable);  

注意: 在 XML 中,

EditText
的默认可编辑属性应该为 true。


6
投票

如何以编程方式执行此操作:

要启用 EditText,请使用:

et.setEnabled(true);

要禁用 EditText,请使用:

et.setEnabled(false);

5
投票

希望这个可以帮助你:

edittext1.setKeyListener(null);
edittext1.setCursorVisible(false);
edittext1.setPressed(false);
edittext1.setFocusable(false);

5
投票
editText.setInputType(InputType.TYPE_NULL);

5
投票

一旦编辑文本的焦点被移除,即使您再次将其设置为可聚焦,也将不允许您键入。

这里有一个解决方法

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

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


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
投票
editText.setFocusable(false);
editText.setClickable(false);

1
投票

由于

setEditable(false)
已弃用,请使用
textView.setKeyListener(null);
使 editText 不可点击。


1
投票

由于

setEditable(false)
已被弃用,我们无法以编程方式使用它,因此我们可以使用另一种方法来解决它:
setInputType(InputType.TYPE_NULL)

这意味着我们改变了编辑文本的输入类型。我们将其设置为 NULL,因此它变得不可编辑。

这是可能有用的示例(我在 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);

希望这能解决问题


0
投票

简单又安全的方法:

editText.clearFocus();
editText.setFocusable(false);

0
投票

我发现了一个使文本视图或编辑文本字段不可编辑的好做法: findViewById(R.id.anyfield).isEnabled = true 或 false。

© www.soinside.com 2019 - 2024. All rights reserved.