禁用EditText可编辑性和焦点(如TextView)

时间:2011-03-19 01:35:38

标签: android xml android-widget

有没有办法让Android中的EditText行为像TextView(首选XML)? 我尝试过以下方法:

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

这样可行,但我仍然可以触摸EditText以获得焦点(橙色寄宿生),尽管一旦我移开手指,焦点就会丢失。 我不确定focusableInTouchMode是做什么的,但是当我一直接触时它并没有消除焦点。

而我不使用白色背景TextView的原因是TextView的背景很难看。 EditText的背景有圆角和阴影效果。

提前致谢。

6 个答案:

答案 0 :(得分:10)

EditTextTextView非常相似。我看到硬编码到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"

答案 1 :(得分:2)

有多少不同和错误的方式( 始终使用

myEditText.setEnabled(false);

答案 2 :(得分:1)

现在我有了新的方法。由于我关闭了EditText的大部分功能,因此最好考虑如何“美化”TextView的丑陋白色背景。答案在源代码中: 只需将android:background="@android:drawable/edit_text"添加到TextView即可产生相同的效果。 再次感谢马修。

答案 3 :(得分:0)

您可以使用your_edit_text.setKeyListener(null);简化来使其无法使用..

答案 4 :(得分:0)

如果您希望EditText不可编辑或可聚焦(就像TextView一样)但背景正确,则可以在?editTextBackground上使用属性TextView。如果您使用像@android:drawable/edit_text这样的drawable,它将不会使用依赖于api版本的背景。

此:

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

具有相同的UI属性:

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

答案 5 :(得分:0)

要使EditText不可触摸:

android:enabled="false"
android:clickable="false"
android:longClickable="false"

要使EditText看起来像TextView:

android:background="@android:color/transparent"