Как сделать EditText недоступным для редактирования через XML в Android?

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

  1. Он устарел; а также
  2. Это не сработало.

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

 textView.setKeyListener(null); 

Оно работает.

Изменить: Чтобы добавить KeyListener позже, сделайте следующее

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

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

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

 textView.setKeyListener((KeyListener) textView.getTag()); 

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

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

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

Пусть ваш Edittext

 EditText editText; 

editText.setKeyListener(null);

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

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

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

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

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

  android:focusable="false" 

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

 editText.setFocusableInTouchMode(true); 

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

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

 android:enabled="false" 

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

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

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

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

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

Через XML:

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

Из кода:

 ((EditText) findViewById(R.id.LoginNameEditText)).setFocusable(false); 

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

  android:focusable="false" 

Если вы хотите сделать это в java-коде, просто используйте эту строку, чтобы отключить его:

 editText.setEnabled(false); 

И это, чтобы включить это:

 editText.setEnabled(true); 

Я пытался это сделать:

 textView.setInputType( InputType.TYPE_NULL ); 

Который должен работать, но для меня это не так.

Я закончил с этим кодом:

 textView.setKeyListener(new NumberKeyListener() { public int getInputType() { return InputType.TYPE_NULL; } protected char[] getAcceptedChars() { return new char[] {}; } }); 

Который отлично работает.

 <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" /> 

И используйте следующее:

 txtDate.setKeyListener(null); 

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

Вы можете использовать android:editable="false" но я бы действительно посоветовал вам использовать setEnabled(false) поскольку он дает визуальную подсказку пользователю о том, что элемент управления нельзя редактировать. Такая же визуальная метка используется всеми отключенными виджетами, и согласованность хороша.

Когда я хочу, чтобы активность не фокусировалась на EditText, а также не отображала клавиатуру при нажатии, это то, что сработало для меня.

Добавление атрибутов в основной макет

 android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" 

А затем поле EditText

 android:focusable="false" android:focusableInTouchMode="false" 

Вот пример:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_home" android:background="@drawable/bg_landing" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="0dp" android:paddingLeft="0dp" android:paddingRight="0dp" android:paddingTop="@dimen/activity_vertical_margin" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" tools:context="com.woppi.woppi.samplelapp.HomeActivity"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:inputType="textPersonName" android:ems="10" android:id="@+id/fromEditText" android:layout_weight="1" android:hint="@string/placeholder_choose_language" android:textColor="@android:color/white" android:textColorHint="@android:color/darker_gray" android:focusable="false" android:focusableInTouchMode="false" android:onClick="onSelectFromLanguage" /> </RelativeLayout> 

Я пробовал следующее:

 codeEditText.setInputType(InputType.TYPE_NULL); this.codeEditText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { pickCode(); } } }); this.codeEditText.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pickCode(); } }); 

Но проблема заключалась в том, что если текст редактирования является первым в форме, он получает фокус, и сразузывается код pickCode (), который запускает новое действие. Поэтому я изменил код следующим образом и, похоже, работает неплохо (за исключением того, что я не могу сосредоточиться на редактировании текста, но мне не нужно):

 itemCodeEditText.setFocusable(false); this.itemCodeEditText.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { pickItem(); } }); 

С наилучшими пожеланиями,

Комментарии приветствуются,

Джон Гоше

В дополнение к @mahe madi вы также можете попробовать это

 editText.setEnabled(false); editor.setTextColor(Color.BLACK); 

Этот метод скроет курсор, потеряет фокус и, что более важно, установит цвет текста черным, как TextView.

И для возврата обратно в editText просто сделайте это, чтобы получить все свойства EditText.

 editText.setEnabled(true); 

Надеюсь, поможет 🙂

Я использую EditText.setFocusable(false) и снова устанавливаю true, если я хочу редактировать.

Android: editable устарел, поэтому вместо этого используйте inputType .

  <EditText android:id="@+id/editText_x" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="70" android:inputType="none" android:hint="@string/enter_x" /> 

Попробуй это :

 android:inputType="none" 

Этот способ выполнил эту работу для меня, я могу выбрать и скопировать в буфер обмена, но я не могу изменять или вставлять.

 android:enable="true" android:textIsSelectable="true" android:inputType="none" 

Я столкнулся с такой же проблемой, но после наблюдения я обнаружил, что android:editable="false" работает только тогда, когда inputtype ( android:inputType="ANY_VALUE" ) не указан в Edittext.

Удалите inputType из EditText и используйте editable = false, его работоспособность.

Эта комбинация работала для меня:

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

Пытаться

 .setInputType(InputType.TYPE_NULL); 

Попробуйте этот код. Он работает в моем проекте, поэтому он будет работать в вашем проекте.

 android:editable="false"