Отключение EditText в Android

В моем приложении у меня есть EditText, который пользователь имеет только для чтения, а не для записи.

В коде я установил android:enabled="false".

Хотя фон EditText изменился на темный, при нажатии на него появляется клавиатура, и я могу изменить текст.

Что я должен установить, чтобы отключить EdidText?

Благодарю.

Ответ 1

Я считаю, что правильным было бы установить android:editable="false".

И если вам интересно, почему моя ссылка указывает на атрибуты TextView, вы отвечаете за то, что EditText наследует от TextView:

EditText - тонкий шпон поверх TextView, который настраивает себя как редактирования.

Update:
Как указано в комментариях ниже, editable устарел (с уровня API 3). Вместо этого вы должны использовать inputType (со значением none).

Ответ 2

использовать EditText.setFocusable(false) для отключения редактирования
EditText.setFocusableInTouchMode(true), чтобы включить редактирование;

Ответ 3

Вы можете попробовать следующий метод:

 private void disableEditText(EditText editText) {
    editText.setFocusable(false);
    editText.setEnabled(false);
    editText.setCursorVisible(false);
    editText.setKeyListener(null);
    editText.setBackgroundColor(Color.TRANSPARENT); 
 }

Включено EditText:

Enabled EditText

Отключено EditText:

Disabled EditText

Это работает для меня и надеюсь, что это поможет вам.

Ответ 4

Используйте это, чтобы отключить ввод пользователя

android:focusable="false"

android: editable = "false" Этот метод устарел.

Ответ 5

Для отключения редактирования EditText, я думаю, мы можем использовать focusable ИЛИ enable, но

  1. Используя android:enabled=... или editText.setEnabled(...)

    Он также меняет цвет текста в EditText на серый.
    При нажатии это не имеет никакого эффекта

  2. Используя android:focusable=... или editText.setFocusable(false) - editText.setFocusableInTouchMode(true)

    не меняет цвет текста EditText
    При нажатии он выделяет нижнюю строку EditText в течение нескольких миллисекунд

Выход

enter image description here

Ответ 6

Поскольку android:editable="false" лишен. Вы можете использовать InputType TYPE_NULL в EditText

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

editText.setInputType(InputType.TYPE_NULL);

Ответ 7

Как android:editable="false" устарела в xml

Использовать android:enabled="false" это просто. Зачем использовать больше кода?

Если вы хотите в java class вы также можете использовать это программно

 editText.setEnabled(false);

Ответ 8

Просто:

editText.setEnabled(false);

Ответ 9

Установить свойства в классе:

editText.setFocusable(false);
editText.setEnabled(false);

Он будет работать плавно, как вам нужно.

Ответ 10

Используйте TextView вместо этого.

Ответ 11

если вы используете android:editable="false", eclipse напомнит вам это сообщение: "android: editable устарел: вместо этого используйте" InputType ".

Итак, я использую android:focusable="false" вместо этого, это сработало для меня.

Ответ 12

android:editable="false"

сейчас устарела и использовать

 YourEditText.setInputType(InputType.TYPE_NULL);

Ответ 13

Это сделает ваш текст редактирования отключенным.

editText.setEnabled(false);

И с помощью этого

editText.setInputType(InputType.TYPE_NULL);

Просто заставит ваш Edittext не показывать вашу программную клавиатуру, но если он подключен к физической клавиатуре, он позволит вам печатать.

Ответ 14

Попробуйте это, отлично работает для меня:

public class CustomEdittext extends EditText {

Boolean mIsTextEditor=true;
public CustomEdittext(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
}

@Override
public boolean onCheckIsTextEditor() {
    // TODO Auto-generated method stub
    return mIsTextEditor;
}


@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    mIsTextEditor=false;
    Boolean mOnTouchEvent=super.onTouchEvent(event);
    mIsTextEditor=true;     
    return mOnTouchEvent;
} }

Примечание. Вам необходимо добавить this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); от вашей активности, либо keyboard будет всплывать в первый раз.

Ответ 15

В моем случае мне понадобился EditText для прокрутки текста, если нет. строк превышает maxLines, когда он отключен. Эта реализация отлично работала для меня.

private void setIsChatEditTextEditable(boolean value)
{
    if(value)
    {
        mEdittext.setCursorVisible(true);
        mEdittext.setSelection(chat_edittext.length());
       // use new EditText(getApplicationContext()).getKeyListener()) if required below
        mEdittext.setKeyListener(new AppCompatEditText(getApplicationContext()).getKeyListener());  
    }
    else
    {
        mEdittext.setCursorVisible(false);
        mEdittext.setKeyListener(null);
    }
}

Ответ 16

Как отмечают некоторые ответы, если вы отключите editText, он станет серым, а если вы установите фокусируемое значение false, курсор будет отображаться.

Если вы хотели бы сделать это только с XML, это сделало свое дело

       <YourFloatLabel
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

            <EditText
                android:id="@+id/view_ads_search_select"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:focusable="true"
                android:clickable="true"/>  
       </YourFloatLabel>

Я просто добавляю FrameLayout, появляющийся над editText, и устанавливаю его фокусируемым и кликабельным, чтобы на editText нельзя было нажать.

Ответ 17

Чтобы отключить функциональность EditText, просто используйте:

EditText.setInputType(InputType.TYPE_NULL);

если вы хотите включить его каким-либо образом, вы можете использовать:

EditText.setInputType(InputType.TYPE_CLASS_TEXT);

Ответ 18

Сегодня я все еще использую editable="false", но также и с focusable="false".

Я думаю, что нам нужно сделать редактируемый EditText, потому что мы хотим сохранить его стиль EditText (с этим подчеркиванием, с подсказкой и т.д.), но он принимает другие входы вместо текста. Например, выпадающий список.

В таком случае мы должны иметь EditText clickable (поэтому enabled="false" не подходит). Однако установка focusable="false" делает этот трюк, , я все еще могу долго удерживать EditText и вставлять свой собственный текст из него из буфера обмена. В зависимости от вашего кода и управления это может даже привести к краху вашего приложения.

Поэтому я также использовал editable="false", и теперь все отлично, кроме предупреждения.

Ответ 19

вы можете использовать android:focusable="false" но также необходимо отключить курсор, иначе функция копирования/вставки все равно будет работать.

поэтому, используйте

android:focusable="false"
android:cursorVisible="false"

Ответ 20

Есть несколько способов достижения нескольких уровней инвалидности.

  • editText.setShowSoftInputOnFocus(false); и editText.setFocusable

препятствует тому, чтобы EditText показывал клавиатуру - запись в некотором тексте. Но курсор все еще виден, и пользователь может вставить некоторый текст.

  • editText.setCursorVisible(false)

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

  • editText.setKeyListener(null)

Я считаю этот способ наиболее удобным. Пользователь не может вводить текст, но виджет по-прежнему работает с OnClickListener если вы хотите инициировать действие, когда пользователь касается его.

  • editText.setEnabled(false);

полностью отключает EditText. Он буквально "только для чтения", пользователь не может вводить в него текст и (например) OnClickListener не работает с ним.

Документация TextEdit

Ответ 21

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

Android: фокусируемый = "ложь"

Ответ 22

Из комментария @Asymptote к принятому ответу используйте:

myEditText.setEnabled(false);
myEditText.setInputType(InputType.TYPE_NULL);

... и Боб твой дядя.

Ответ 23

Установите это в своем XML-коде, это работает.

андроид: focusableInTouchMode = "ложь"