Disable EditText editability and focus (like TextV

2019-02-08 19:05发布

问题:

Is there a way to make EditText behaviors like TextView in Android (XML is prefered)? I have tried the following:

 android:editable="false"
 android:focusable="false"
 android:focusableInTouchMode="false"
 android:cursorVisible="false"
 android:longClickable="false"

This works but I still can touch the EditText to get focus (the orange boarder), though the focus lost as soon as I remove my finger. I'm not sure what focusableInTouchMode does, but it doesn't remove the focus when I keep touching.

And the reason why I don't use a white background TextView instead is that the TextView's background is ugly. EditText's background has round corners and shadow effect.

Thanks in advance.

回答1:

EditText and TextView are quite similar. The only difference I see hard-coded into EditText.java is to set the editable default to true, which you've set manually. Other than that, the EditText style is:

<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>

and TextView is:

<style name="Widget.TextView">
    <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
</style>

My guess is that @android:drawable/edit_text is the source of the orange box. Indeed, it contains:

<item android:state_pressed="true" android:drawable="@drawable/textfield_pressed"/>

The simplest way might be to set its background to the default one:

android:background="@android:drawable/textfield_default"



回答2:

Disable EditText editability and focus (like TextView).

Try this :

android:longClickable="false"
android:clickable="false"    
android:cursorVisible="false"
android:editable="false"


回答3:

How many diffrent and wrong ways( Use always

myEditText.setEnabled(false);


回答4:

Now I get a new way. Since I turned off most features of EditText, it should be better to think how to "beautify" the ugly white background of TextView. And the answer is in the source code: Just adding android:background="@android:drawable/edit_text" to a TextView makes the same effects. Thanks again Matthew.



回答5:

You can use your_edit_text.setKeyListener(null); simply to make it un-editable..



回答6:

If you want an EditText not editable or focusable (just like a TextView) but with the correct background, you can use the attribute ?editTextBackground on a TextView. If you use drawables like @android:drawable/edit_text it will not use a background dependent on the api version.

This:

  <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content" />

has the same UI properties of this:

   <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="?editTextBackground"/>