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

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

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

Ответ 1

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

textView.setKeyListener(null);

Он работает.

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

1: установить для прослушивателя клавиш тег textView

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

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

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

Ответ 2

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

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

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

Ответ 3

Пусть ваш Edittext будет

EditText editText;

editText.setKeyListener(null);

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

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

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

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

Ответ 4

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

 android:focusable="false"

перезапустить с Java, если нужно (также одну строку):

editText.setFocusableInTouchMode(true);

Ответ 5

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

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

android:enabled="false"

Ответ 6

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

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

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

Ответ 7

Как вы упомянули, android: editable устарел. 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);

Ответ 8

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

        android:focusable="false"

Ответ 9

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

editText.setEnabled(false);

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

editText.setEnabled(true);

Ответ 10

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

textView.setInputType( InputType.TYPE_NULL );

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

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

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

    protected char[] getAcceptedChars() {
        return new char[] {};
    }
});

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

Ответ 14

Когда я хочу, чтобы активность не фокусировалась на 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>

Ответ 15

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

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

Ответ 16

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

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

  }

});

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

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

Джон Гоше

Ответ 17

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

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

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

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

editText.setEnabled(true);

Надеюсь, что это поможет:)

Ответ 18

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

Ответ 19

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

Ответ 20

Попробуйте следующее:

android:inputType="none"

Ответ 21

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

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

Ответ 22

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

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

Ответ 23

Try

.setInputType(InputType.TYPE_NULL);

Ответ 24

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

android:editable="false"