Как сделать EditText недоступным для редактирования через XML в Android? - PullRequest
287 голосов
/ 14 октября 2010

Может кто-нибудь сказать мне, как сделать EditText недоступным для редактирования через XML? Я попытался установить android:editable на false, но

  1. устарело; и
  2. это не сработало.

Ответы [ 25 ]

389 голосов
/ 30 мая 2011

Используйте этот простой код:

textView.setKeyListener(null);

Работает.

Редактировать: чтобы добавить KeyListener позже, выполните следующие действия:

1: установить ключевой слушатель на тег textView

textView.setTag(textView.getKeyListener());
textView.setKeyListener(null);

2: получить ключевой слушатель из тега и установить его обратно в textView

textView.setKeyListener((KeyListener) textView.getTag());
378 голосов
/ 21 октября 2011

Добавьте это в ваш XML-файл EditText:

<EditText ...
        android:clickable="false" 
        android:cursorVisible="false" 
        android:focusable="false" 
        android:focusableInTouchMode="false">
</EditText>

Это будет иметь тот же эффект, что и android:editable="false".Сработало для меня, надеюсь, это сработает и для вас.

54 голосов
/ 07 февраля 2012

Пусть ваш текст редактирования будет

EditText editText;

editText.setKeyListener(null);

, но он просто не слушает клавиши.

Пользователь может видеть курсор на тексте редактирования.

Вы можете попробовать editText.setEnabled(false);

Это означает, что пользователь не может видеть курсор.Проще говоря, это станет TextView.

27 голосов
/ 21 июля 2014

Как упоминалось в других ответах, вы можете сделать setEnabled(false), но, поскольку вы спрашиваете, как установить его с помощью XML, вот как это сделать.

Добавьте следующий атрибут к вашему EditText:

android:enabled="false"
24 голосов
/ 06 февраля 2014

отключить из XML (одна строка):

 android:focusable="false"

повторно включить из Java, если необходимо (также одна строка):

editText.setFocusableInTouchMode(true);
15 голосов
/ 20 октября 2010

Они сделали "редактируемые" устаревшими, но не предоставили рабочую соответствующую в inputType.

Кстати, inputType = "none" имеет какой-либо эффект? Насколько я понимаю, использовать это или нет не имеет никакого значения.

Например, editText по умолчанию называется одной строкой. Но вы должны выбрать inputType, чтобы он был одной строкой. И если вы выберете «нет», он все равно будет многострочным.

13 голосов
/ 09 мая 2013

Как вы упомянули Android: редактирование устарело.android: inputType = "none" следует использовать вместо этого, но это не работает из-за ошибки (https://code.google.com/p/android/issues/detail?id=2854)

Но вы можете добиться того же, используя focusable.

Через XML:

<EditText ...
        android:focusable="false" 
</EditText>

Из кода:

((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false);
12 голосов
/ 11 марта 2016

, если вы хотите щелкнуть по нему, но не хотите редактировать, попробуйте:

        android:focusable="false"
11 голосов
/ 12 июня 2017

У меня эта комбинация сработала:

<EditText ... >
    android:longClickable="false"
    android:cursorVisible="false"
    android:focusableInTouchMode="false"
</EditText>
7 голосов
/ 14 июня 2016

Просто используйте android:enabled="false".Это также приведет к появлению EditText, что сделает его не редактируемым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...