禁用 EditText 可编辑性和焦点(如 TextView)
Posted
技术标签:
【中文标题】禁用 EditText 可编辑性和焦点(如 TextView)【英文标题】:Disable EditText editability and focus (like TextView) 【发布时间】:2011-07-18 13:57:30 【问题描述】:有没有办法在 android 中使 EditText
行为类似于 TextView
(首选 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 中的唯一区别是将可编辑默认设置为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
是橙色框的来源。确实,it contains:
<item android:state_pressed="true" android:drawable="@drawable/textfield_pressed"/>
最简单的方法可能是将其背景设置为默认背景:
android:background="@android:drawable/textfield_default"
【讨论】:
感谢源代码。我不确定@drawable/textfield_pressed
是否是内置的,但是eclipse 给了我一个错误。看了你的源码后,我发现我也应该关闭android:clickable
,它确实有效!
太棒了!所以答案是关闭 android:clickable?顺便说一句,引用textfield_pressed的正确方法是@android:drawable/textfield_pressed【参考方案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】:如果您希望EditText
不可编辑或聚焦(就像TextView
)但具有正确的背景,您可以在TextView
上使用属性?editTextBackground
。如果你使用像@android:drawable/edit_text
这样的drawables,它不会使用依赖于api版本的背景。
这个:
<EditText
android:layout_
android:layout_ />
具有与此相同的 UI 属性:
<TextView
android:layout_
android:layout_
android:background="?editTextBackground"/>
【讨论】:
【参考方案7】:使 EditText 不可触摸:
android:enabled="false"
android:clickable="false"
android:longClickable="false"
要让 EditText 看起来像 TextView:
android:background="@android:color/transparent"
【讨论】:
以上是关于禁用 EditText 可编辑性和焦点(如 TextView)的主要内容,如果未能解决你的问题,请参考以下文章
Android Edittext Drawable 点击卡住焦点