在某些设备上禁用EditText时,EditText不可读

时间:2012-06-13 15:46:23

标签: android user-interface user-input

我有一个简单的EditText字段,在登录页面上显示用户的电话号码。初次登录后,电话号码字段将被禁用。

这几乎在我的所有设备上看起来都很棒(此截图来自三星Galaxy S):
enter image description here

然而,在我的LG Nitro上,禁用的EditText字段中的文字是不可读的(如果我放大高分辨率屏幕截图,我可以看到白色文字):
enter image description here

我从EditText中删除了所有自定义样式规则,并且出现了同样的问题,因此我认为这只是手机系统默认颜色的错误选择。

问题1:有人可以确认我的诊断是否正确吗?

我能使文本可读的唯一方法是在代码中将文本设置为深灰色:

if (fieldDisabled)
{
  // Some devices use their own default style for a disabled text field,
  // which makes it impossible to read its text, e.g. the LG Nitro.
  //
  // The workaround is to override the text color here.
  mPhoneNumber.setTextColor(Color.DKGRAY);
}

之后,所有设备(包括LG Nitro)上的文字都很容易阅读:
enter image description here

我将自定义样式设置为使用@color/black而不是现有颜色,但文本仍显示为白色。

问题2:我可以使用更好的解决方法吗?

我的LG Nitro是运行OS 2.3.5的LG-P930型号。

我的XML

以下是我正在使用的XML的片段。

RES /布局/ myscreen.xml:

<EditText
  ...
  android:textAppearance="@style/MyStyle">
</EditText>

RES /值/ styles.xml:

<style name="MyStyle">
  <item name="android:textSize">14dp</item>
  <item name="android:textColor">@color/blue</item>
</style>

RES /值/ colors.xml:

<color name="white">#ffffffff</color>
<color name="blue">#ff0000ff</color>
<color name="black">#ff000000</color>

1 个答案:

答案 0 :(得分:6)

我想出了如何更改EditText文本的颜色。

使用android:textAppearance 似乎允许您更改EditText中文本的颜色(它允许您更改文字大小)。

另一种方法是使用style属性而不是android:textAppearance,因为这将应用文本颜色更改,例如

style="@style/MyStyle"

但是,我认为最好的解决方案是使用ColorStateList。以下是我的解决方案。

res / layout / myscreen.xml(仍然需要textAppearance来控制文本大小):

<EditText
  ...
  android:textColor="@color/edittext"
  android:textAppearance="@style/MyStyle">
</EditText>

RES /颜色/ edittext.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="true" android:color="@color/black" />
  <item android:state_enabled="false" android:color="@color/grey" />
</selector>

res / values / styles.xml(即make MyStyle只定义文本大小,而不是颜色):

<style name="MyStyle">
  <item name="android:textSize">14dp</item>
</style>