禁用 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】:

EditTextTextView 非常相似。我看到硬编码到EditText.java 中的唯一区别是将可编辑默认设置为true,这是您手动设置的。除此之外,EditTextstyle 是:

<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 点击卡住焦点

聚焦时如何隐藏edittext的线条颜色

如何为 API < 21 的 EditText 焦点颜色着色?

用户输入后禁用edittext searchview

Android:EditText 重新启用后无法获得焦点

Android开发:如何实现点击TextView可直接编辑?