Disable EditText editability and focus (like TextView)
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.
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"
Disable EditText editability and focus (like TextView).
Try this :
android:longClickable="false"
android:clickable="false"
android:cursorVisible="false"
android:editable="false"
How many diffrent and wrong ways( Use always
myEditText.setEnabled(false);
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.
You can use your_edit_text.setKeyListener(null);
simply to make it un-editable..
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"/>
To make EditText not touchable:
android:enabled="false"
android:clickable="false"
android:longClickable="false"
To make EditText look like TextView:
android:background="@android:color/transparent"
精彩评论