Отключить редактирование и фокус 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"/>