我有一个简单的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的片段。
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>
答案 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>