在属性中设置textview的颜色后,运行时此提示会出现在logcat上,
这是什么意思?

将textview颜色恢复为其默认值时,错误消失,并且一切运行良好。

怎么了?如何正确设置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" />


在string.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一样。

如果您阅读了《字符串参考文档》,您将看到它代表一个字符序列。另一方面,颜色表示整数序列。

最后,如果您阅读了Reference Documentation for TextView,您将看到XML属性android:textColor等效于方法setTextColor(int)。因此,当您编写<string name="TColor">#ff0000</string>时,您尝试将字符串放入setTextColor(int)中。

10-04 23:12