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

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

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

Ответы [ 25 ]

7 голосов
/ 26 сентября 2012
<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);
6 голосов
/ 27 января 2014

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

editText.setEnabled(false);

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

editText.setEnabled(true);
5 голосов
/ 05 апреля 2011

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

textView.setInputType( InputType.TYPE_NULL );

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

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

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

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

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

3 голосов
/ 17 ноября 2016

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

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

2 голосов
/ 21 сентября 2015

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

android:inputType="none"
2 голосов
/ 25 июня 2015

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

2 голосов
/ 15 февраля 2012

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

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

  }

});

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

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

Джон Гош

2 голосов
/ 30 декабря 2013

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

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

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

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

editText.setEnabled(true);

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

2 голосов
/ 04 ноября 2016

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

android:enable="true"
android:textIsSelectable="true"
android:inputType="none"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...