如何在Android中通过XML编辑EditText?

Fra*_*ick 291 android android-edittext

谁能告诉我如何EditText通过XML 进行不可编辑?我试着设置android:editablefalse,但

  1. 它已被弃用; 和
  2. 它不起作用.

Kri*_*adi 393

使用这个简单的代码:

textView.setKeyListener(null);
Run Code Online (Sandbox Code Playgroud)

有用.

编辑:要KeyListener稍后添加,请执行以下操作

1:将键监听器设置为标签 textView

textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);
Run Code Online (Sandbox Code Playgroud)

2:从标签获取密钥监听器并将其设置回 textView

textView.setKeyListener((KeyListener) textView.getTag());
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于通过*XML*设置它,为什么这标记为解决方案? (34认同)
  • @AnkitAwasthi textView.setTag(textView.getKeyListener()); 稍后使用textView.setKeyListener((KeyListener)textView.getTag())将其设置回来; (30认同)
  • 我想设置不可编辑,有什么办法让它再次可编辑...... ??? (13认同)

Gal*_*e33 389

将其添加到EditText xml文件中:

<EditText ...
        android:clickable="false" 
        android:cursorVisible="false" 
        android:focusable="false" 
        android:focusableInTouchMode="false">
</EditText>
Run Code Online (Sandbox Code Playgroud)

它会起到同样的效果android:editable="false".为我工作,希望它也适合你.

  • 区别在于它可以与`TextInputLayout`一起使用 (11认同)
  • notes.setKeyListener(NULL); notes.setClickable(假); notes.setCursorVisible(假); notes.setFocusable(假); notes.setFocusableInTouchMode(假); (3认同)
  • 如果你想在XML中做...它和TextView有什么区别? (3认同)
  • 这应该被标记为解决方案,因为它是问题中请求的纯XML解决方案. (2认同)
  • 已弃用(2018 年 10 月) (2认同)

Mah*_*ran 54

让你的Edittext成为

EditText editText;
Run Code Online (Sandbox Code Playgroud)

editText.setKeyListener(null);

会工作,但它只是没有听到钥匙.

用户可以在edittext上看到光标.

你可以试试 editText.setEnabled(false);

这意味着用户无法看到光标.简单地说它会成为TextView.

  • 这是正确的,因为EditText是TextView的子类.但是,请使用editText作为变量而不是textView. (3认同)

vid*_*ida 30

正如其他答案中所提到的,你可以做一个setEnabled(false) 但是因为你问的是如何通过XML设置它,这里是如何做到的.

将以下属性添加到您的EditText:

android:enabled="false"
Run Code Online (Sandbox Code Playgroud)

  • 通过启用,我们也无法访问点击监听器.所以对我来说不是答案. (7认同)
  • OP问题的确切答案. (4认同)
  • @Lalitkumar`enable`不被弃用.`editable`是. (2认同)

kou*_*nho 24

禁用XML(一行):

 android:focusable="false"
Run Code Online (Sandbox Code Playgroud)

如果需要,也可以从Java重新启用(也是一行):

editText.setFocusableInTouchMode(true);
Run Code Online (Sandbox Code Playgroud)


Tim*_*çin 15

他们将"可编辑"弃用,但没有在inputType中提供相应的工作.

顺便说一句,inputType ="none"有效吗?就我看来,使用与否使用并没有任何区别.

例如,默认的editText被称为单行.但是你必须选择一个inputType作为单行.如果选择"无",它仍然是多行的.

  • Google混乱的一个很好的例子 (11认同)

Ado*_*ncz 13

正如你提到的android:editable已被弃用.应该使用android:inputType ="none"但由于错误而无效(https://code.google.com/p/android/issues/detail?id=2854)

但是你可以通过使用可聚焦来实现同样的目的.

通过XML:

<EditText ...
        android:focusable="false" 
</EditText>
Run Code Online (Sandbox Code Playgroud)

来自代码:

((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
Run Code Online (Sandbox Code Playgroud)


Mas*_*ari 13

这个组合对我有用:

<EditText ... >
    android:longClickable="false"
    android:cursorVisible="false"
    android:focusableInTouchMode="false"
</EditText>
Run Code Online (Sandbox Code Playgroud)


Kai*_*ang 12

如果要单击它,但不想编辑它,请尝试:

        android:focusable="false"
Run Code Online (Sandbox Code Playgroud)


ask*_*imp 7

<EditText
    android:id="@+id/txtDate"
    android:layout_width="140dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="2dp"
    android:clickable="false"
    android:cursorVisible="false"
    android:gravity="center" />
Run Code Online (Sandbox Code Playgroud)

并使用以下:

txtDate.setKeyListener(null);
Run Code Online (Sandbox Code Playgroud)


Sha*_*war 7

只是用 android:enabled="false".这也将使外观EditText看起来不可编辑.


小智 6

如果你想在java代码中执行它,只需使用此行禁用它:

editText.setEnabled(false);
Run Code Online (Sandbox Code Playgroud)

这样就可以了:

editText.setEnabled(true);
Run Code Online (Sandbox Code Playgroud)


sar*_*ric 5

我试着这样做:

textView.setInputType( InputType.TYPE_NULL );
Run Code Online (Sandbox Code Playgroud)

这应该工作,但对我来说它没有.

我完成了这段代码:

textView.setKeyListener(new NumberKeyListener() {
    public int getInputType() {
        return InputType.TYPE_NULL;
    }

    protected char[] getAcceptedChars() {
        return new char[] {};
    }
});
Run Code Online (Sandbox Code Playgroud)

哪作得很好.