Как сделать EditText не редактируемым через XML в Android?
может кто-нибудь сказать мне, как сделать EditText
не редактируется через XML? Я попытался установить android:editable
to false
, а
- это устарело; и
- это не сработало.
24 ответов
используйте этот простой код:
textView.setKeyListener(null);
это работает.
Edit: добавить 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" какой-либо эффект? Использовать его или нет не имеет никакого значения, насколько я вижу.
например, editText по умолчанию называется одной строкой. Но вы должны выбрать inputType, чтобы он был одной строкой. И если вы выберете "нет", он все равно будет многострочным.
Как вы упомянули android: редактируемый устарел. 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);
эта комбинация работает для меня:
<EditText ... >
android:longClickable="false"
android:cursorVisible="false"
android:focusableInTouchMode="false"
</EditText>
Если вы хотите сделать это в коде 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();
}
});
С Уважением,
комментарии приветствуются,
Джон Goche
в дополнение к @mahe madi вы также можете попробовать это
editText.setEnabled(false);
editor.setTextColor(Color.BLACK);
этот метод скроет курсор, потеряет фокус и, что более важно, установит цвет текста в черный, как TextView.
и вернуться к editText просто сделать это, чтобы получить все свойства EditText.
editText.setEnabled(true);
надеюсь, это поможет:)
android: редактируемый устарел, поэтому используйте помощью свойства 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:enable="true"
android:textIsSelectable="true"
android:inputType="none"
я столкнулся с той же проблемой, но после наблюдений я установил, что android:editable="false"
работает только тогда, когда inputtype (android:inputType="ANY_VALUE"
) is не приведено в Edittext.
удалить inputType из EditText и использовать editable = false, его работа в порядке.
попробуйте этот код. Это работает в моем проекте, поэтому он будет работать в вашем проекте.
android:editable="false"