无法将EditText更改回可再次编辑

时间:2018-10-26 00:20:48

标签: android android-edittext

我一直试图将EditText恢复为可编程方式,但它根本无法正常工作。

我查看了多个线程,每个人都在说同样的话,但是由于某种原因,它对我不起作用。

我看着这个,但没有成功

Cannot change EditText back to being editable

谁能找到为什么我的EditText再也无法恢复为可编辑状态的原因?一旦禁用它并尝试重新启用它,该软键将不再显示。这是代码捕捉:

boolean enabled = true;
final Button button = (Button) findViewById(R.id.bnt3);
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        enabled = !enabled;
        EditText editView = (EditText) findViewById(R.id.popup_dlg_edit_text_id);
        if (enabled) {
            //BUG: this code never makes my EditText editable again :(
            editView.setFocusable(true);
            editView.setEnabled(true);
            editView.setCursorVisible(true);
            editView.setFocusable(true);
            editView.setFocusableInTouchMode(true);
            editView.setClickable(true);
        } else {

            editView.setFocusable(false);
            editView.setEnabled(false);
            editView.setCursorVisible(false);
            editView.setKeyListener(null);
            editView.setBackgroundColor(Color.TRANSPARENT);
        }
    }
});

我的布局

<EditText
    android:id="@+id/popup_dlg_edit_text_id"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:backgroundTint="@android:color/holo_green_light"
    android:hint="@string/app_name"
    android:inputType="textNoSuggestions"
    android:maxLines="1"
    android:textSize="@dimen/default_font_small" />

2 个答案:

答案 0 :(得分:0)

要以编程方式禁用/启用更改,您可以使用:

button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        enabled = !enabled;
        EditText editView = (EditText) findViewById(R.id.popup_dlg_edit_text_id);
        if (enabled) {
            editView.setInputType(InputType.TYPE_CLASS_TEXT)
        } else {
            editView.setInputType(InputType.TYPE_NULL)
        }
    }
});

编辑: 另外,您只需删除两行代码即可正常运行:

//just delete them
editView.setKeyListener(null);
editView.setBackgroundColor(Color.TRANSPARENT);

如果您真的想在禁用EditText时将其设为透明,只需在启用时设置可见性View.INVISIBLE/View.GONEView.VISIBLE

答案 1 :(得分:0)

首先绑定您的视图,然后听我为butterknife使用的按钮单击。 因此,您可以在一行中这样做

@OnClick(R.id.test_btn)
void onChangeEditTextState() {
    editText.setEnabled(!editText.isEnabled());
}

使用setVisibility而非透明背景隐藏视图

editText.setVisibility(editText.isEnabled()? View.VISIBLE:View.INVISIBLE);