Отключить редактирование и фокус EditText (например, TextView)
Есть ли способ сделать EditText
поведение, подобное TextView
в Android (предпочтительнее XML)?
Я пробовал следующее:
android:editable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:cursorVisible="false"
android:longClickable="false"
Это работает, но я все еще могу коснуться EditText
, чтобы получить фокус (оранжевый пансион), хотя фокус потерян, как только я удаляю палец.
Я не уверен, что делает focusableInTouchMode
, но он не удаляет фокус, когда я продолжаю касаться.
И причина, по которой я не использую белый фон TextView
, заключается в том, что фон TextView
уродлив. EditText
фон имеет круглые углы и эффект тени.
Спасибо заранее.
Ответы
Ответ 1
EditText
и TextView
весьма схожи. Единственное отличие, которое я вижу жестко закодированным в EditText.java, - установить для параметра editable default значение true, которое вы установили вручную. Кроме этого, EditText
style:
<style name="Widget.EditText">
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
<item name="android:clickable">true</item>
<item name="android:background">@android:drawable/edit_text</item>
<item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item>
<item name="android:textColor">@android:color/primary_text_light</item>
<item name="android:gravity">center_vertical</item>
</style>
и TextView
:
<style name="Widget.TextView">
<item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
</style>
Я предполагаю, что @android:drawable/edit_text
является источником оранжевого окна. Действительно, содержит:
<item android:state_pressed="true" android:drawable="@drawable/textfield_pressed"/>
Простейшим способом может быть установка фона по умолчанию:
android:background="@android:drawable/textfield_default"
Ответ 2
Отключить редактирование и фокус EditText (например, TextView).
Попробуйте следующее:
android:longClickable="false"
android:clickable="false"
android:cursorVisible="false"
android:editable="false"
Ответ 3
Сколько разных и неправильных способов (
Использовать всегда
myEditText.setEnabled(false);
Ответ 4
Теперь я получаю новый путь. Поскольку я отключил большинство функций EditText
, лучше подумать, как "украсить" уродливый белый фон TextView
. И ответ находится в исходном коде:
Просто добавление android:background="@android:drawable/edit_text"
к TextView
приводит к тем же эффектам.
Еще раз спасибо Мэтью.
Ответ 5
Вы можете использовать your_edit_text.setKeyListener(null);
просто, чтобы сделать его незаменимым..
Ответ 6
Android: фокусируемый = "ложь"
андроид: focusableInTouchMode = "ложь"
Ответ 7
Если вы хотите, чтобы EditText
не редактировался или не фокусировался (как и TextView
), но с правильным фоном, вы можете использовать атрибут ?editTextBackground
на TextView
. Если вы используете drawables как @android:drawable/edit_text
, он не будет использовать фон, зависящий от версии api.
Это:
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
имеет те же свойства UI:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?editTextBackground"/>