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