Отключение 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
, но
Используя android:enabled=...
или editText.setEnabled(...)
Он также меняет цвет текста в EditText
на серый.
При нажатии это не имеет никакого эффекта
Используя 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 = "ложь"