在设置textview属性的颜色后,运行时会在logcat中显示此提示,这是什么意思?
当将textview颜色恢复到默认值时,错误消失,一切正常。
怎么了?如何正确设置文本视图的颜色?谢谢,
11-11 00:45:56.302: E/TextView(2828): Saved cursor position 2/2 out of range for (restored) text
我忘记了我在程序中更改了什么,logcat中的提示显示如下,
enter code here
11-11 01:40:48.102: E/AndroidRuntime(2921): Caused by: android.content.res.Resources$NotFoundException: File #ff0000 from drawable resource ID #0x7f050018: .xml extension required
11-11 01:40:48.102: E/AndroidRuntime(2921): at android.content.res.Resources.loadColorStateList(Resources.java:2255)
11-11 01:40:48.102: E/AndroidRuntime(2921): at android.content.res.TypedArray.getColorStateList(TypedArray.java:342)
11-11 01:40:48.102: E/AndroidRuntime(2921): at android.widget.TextView.<init>(TextView.java:956)
11-11 01:40:48.102: E/AndroidRuntime(2921): at android.widget.TextView.<init>(TextView.java:614)
11-11 01:40:48.102: E/AndroidRuntime(2921): ... 27 more
11-11 01:40:53.693: I/Process(2921): Sending signal. PID: 2921 SIG: 9
在布局中,我设置了
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
...
android:textColor="@string/TColor" />
在字符串.xml中,
<string name="TColor">#ff0000</string>
您需要将#ff0000存储为颜色而不是字符串。
将颜色放入项目的res/values文件夹中的colors.xml文件中。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="my_color>#ff0000</color>
</resources>
然后在您的文本视图中使用:
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
...
android:textColor="@color/my_color" />
<Additional>
读了你最后的评论,我想我明白你有什么困惑了
是的,您可以将不同的资源类型放在一个XML文件中。但它们仍然必须声明为正确的类型。例如,下面的第一个XML很好:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="t_color">#ff0000</color>
<color name="t_color_alternate">#dd0011</color>
<string name="text_1">First Text</string>
<string name="text_2">Second Text</string>
<color name="another_color">#ee3311</color>
<dimen name="my_margin">16dp</dimen>
<string name="text_3">Third Text</string>
</resources>
然而,当您尝试使用资源时,由于类型不正确,第二个XML会给您带来问题:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="t_color">16dp</color>
<color name="t_color_alternate">Fred</color>
<color name="another_color">Rectangle</color>
<dimen name="my_margin">Blue</dimen>
</resources>
<Second Additional>
当您声明<string name="TColor">#ff0000</string>
时,编译器将创建一个String对象,并在您运行应用程序时用字符"#ff0000"填充它。
换句话说,这就像在代码中编写String TColor = "#ff0000"
。
类似地,当您声明<color name="TColor">#ff0000</color>
时,编译器将创建一个Color对象,并在您运行应用程序时用颜色#ff0000填充它。
这就像在代码中编写Color TColor = 0xff0000
。
如果你阅读字符串参考文档,你会发现它代表了一系列的字符。另一方面,"颜色"表示一系列整数。
最后,如果您阅读TextView
的参考文档,您将看到XML属性android:textColor
等效于方法setTextColor(int)
。因此,当您编写<string name="TColor">#ff0000</string>
时,您正试图将一个字符串放入setTextColor(int)
。