代码之家  ›  专栏  ›  技术社区  ›  gmmo

无法将EditText更改回可编辑状态

  •  0
  • gmmo  · 技术社区  · 7 年前

    我一直试图以编程方式将EditText恢复到可编辑状态,但它根本不起作用。

    我看了好几条线索,每个人都在说同样的话,但不管出于什么原因,这对我来说都不管用。

    我看了这个,但没有成功

    Cannot change EditText back to being editable

    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 回复  |  直到 7 年前
        1
  •  0
  •   punchman    7 年前

    对于以编程方式禁用/启用更改,可以使用:

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

    View.INVISIBLE/View.GONE View.VISIBLE 启用时。

        2
  •  0
  •   beshoy samy    7 年前

    首先绑定您的视图,并聆听我使用的按钮点击 butterknife 为了这个。 所以你可以这样做

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

    要隐藏视图,请使用setVisibility而不是透明背景

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