开发者

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"

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜