2

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

这在我几乎所有的设备上看起来都很棒(这张截图来自三星 Galaxy S):
在此处输入图像描述

但是,在我的 LG Nitro 上,禁用的 EditText 字段中的文本是不可读的(如果我放大高分辨率屏幕截图,我几乎可以看到白色文本):
在此处输入图像描述

我从 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)上都很容易阅读:
在此处输入图像描述

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

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

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

我的 XML

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

资源/布局/myscreen.xml:

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

res/values/styles.xml:

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

资源/值/colors.xml:

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

1 回答 1

6

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

Usingandroid:textAppearance似乎不允许您更改 EditText 中文本的颜色(它确实允许您更改文本大小)。

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

style="@style/MyStyle"

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

res/layout/myscreen.xml(还是需要textAppearance来控制文字大小):

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

资源/颜色/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 (即让 MyStyle 只定义文本大小,而不是颜色):

<style name="MyStyle">
  <item name="android:textSize">14dp</item>
</style>
于 2012-06-13T23:44:18.310 回答