【问题标题】:How to make an EditText uneditable/disabled如何使 EditText 不可编辑/禁用
【发布时间】:2011-10-07 13:03:15
【问题描述】:

我有一个 EditText,用户不应该在其中提供输入。所以我尝试禁用它,通过

edittext.setEnabled(false);
edittext.setClickable(false);

但是,当我从其他一些 EditText 按下 softKeyboard 中的“下一步”按钮时,它仍会将我引导到不应编辑的那个,并且我可以将值插入其中。如何避免这种情况?

【问题讨论】:

标签: android android-edittext


【解决方案1】:

这很好用;只需将 edittext 的 focusable 属性设置为“false”即可。

<EditText
        android:id="@+id/EditTextInput"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="false"
        android:gravity="right"
        android:cursorVisible="true">
    </EditText>

【讨论】:

  • 这不是一个可接受的答案,因为如果我们长按 EditText,我们可以使用此解决方案粘贴新数据。正确的解决方案是 EditTextInput.setKeyListener(null);
  • @Venkat 我同意这个答案不应该被接受。我们刚刚遇到了一个问题,isFocusable = false 仍然允许长按并复制粘贴输入中应该禁用的任何内容。您的回答实际上符合预期。
【解决方案2】:

不要把自己搞砸了。使用起来很简单

首先,保存EditText的key listener:

KeyListener mKeyListener = yourTextView.getKeyListener();
yourTextView.setKeyListener(null);

然后,如果您想再次启用编辑,请将保存的侦听器重新分配:

yourTextView.setKeyListener(mKeyListener);

source

【讨论】:

  • 如果你想从代码中做到这一点,这是最好的选择。
  • 禁用后要启用怎么办?
  • @kirtan403 设置你的 textview.setKeyListener(你的监听器);
  • 如果你们想在之后启用编辑,您需要先通过 edittext.getKeyListener() 存储/保存 KeyListener,然后再将其分配回来。 stackoverflow.com/questions/10933056/edit-text-key-listener
  • 请注意,之后使用setInputType 会重置密钥侦听器。
【解决方案3】:
yourEditText.setKeyListener(null);

无需移除焦点并设置可点击为false。

只需删除关键侦听器即可完成。

还使用 Android 6.0 进行了测试

【讨论】:

  • 这很棒,因为它不会使 EditText 文本颜色发生变化。
【解决方案4】:

好的。我做了这样的事情并得到了结果。

    edittext.setEnabled(false);
    edittext.setGravity(Gravity.CENTER);
    edittext.setClickable(false);
    edittext.setFocusable(false);
    edittext.setFilters(new InputFilter[] { new textChange() });
    edittext.setInputType(0);

       class textChange implements InputFilter {
    public CharSequence filter(CharSequence source, int start, int end,
            Spanned dest, int dstart, int dend) {

        return dest.subSequence(dstart, dend);
    }
}

【讨论】:

    【解决方案5】:
    android:focusable="false"
    android:longClickable="false"
    

    将这两个字段添加到您的 EditText 将禁用焦点,并且还会禁用将数据复制粘贴到您的 EditText 字段中。

    【讨论】:

    • 正在寻找仅 XML 的解决方案,这似乎工作正常。
    【解决方案6】:

    尝试添加

    edittext.setFocusable(false); edittest.setFocusableInTouchMode(false);

    【讨论】:

    • setFocusable(false) 将自动禁用setFocusableInTouchMode
    【解决方案7】:

    看看this

    editText.setEnabled(false);editText.setFocusable(false); 将实现。

    【讨论】:

      【解决方案8】:

      在您的 EditText Xml 代码中。粘贴到下一行。

      android:focusable="false"
      

      【讨论】:

        【解决方案9】:
        android:focusable="false" 
        

        为我工作。

        【讨论】:

        • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
        【解决方案10】:

        使用 imeOptions 属性将软键盘中的按钮更改为完成

        android:imeOptions="actionDone"

        将它添加到 EditText 之前要禁用的那个。

        【讨论】:

          【解决方案11】:

          这可能对某人有帮助。 我找到了一种实现方式:

          @Override
              public boolean onTouch(View v, MotionEvent event) {
                  //for edit text
                  return locked;
              }
          

          locked 处于锁定状态。

          当然,我必须使用editText.setOnTouchListener(&lt;listener&gt;);

          【讨论】:

            猜你喜欢
            • 2020-06-03
            • 1970-01-01
            • 2011-07-18
            • 2015-10-25
            • 1970-01-01
            • 2012-02-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多