NotFoundException将FrameLayout的背景属性设置为颜色状态列表,可以将textColor设置为相同的颜色

时间:2015-03-03 18:51:53

标签: android xml

我正在尝试在FrameLayout中创建文本,因此它看起来像这样:

enter image description here

但是,我希望它在触摸时有不同的颜色。所以,我用XML创建了一个颜色状态列表,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/color_pressed" android:state_pressed="true" />
    <item android:color="@color/color_default" />
</selector>

当我将其设置为TextView的textColor属性时,这完全正常。但是,当我将其设置为封闭FrameLayout的background属性时,我得到一个异常!

以下是布局中的XML代码:

<FrameLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/green_selector"
android:padding="2dp"
android:layout_marginTop="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp">

     <TextView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:textSize="17sp"
     android:textColor="@color/green_selector"
     android:layout_gravity="center"
     android:text="Some Text"
     android:background="@color/white"
     android:gravity="center"/>

</FrameLayout>

android:textColor="@color/green_selector"行绝对正常。但是,android:background="@color/green_selector"给了我以下例外:

android.content.res.Resources$NotFoundException: File res/color/green_selector.xml from drawable resource ID #0x7f0a00e6
    E/AndroidRuntime(25682):    at android.content.res.Resources.loadDrawable(Resources.java:3439)
    E/AndroidRuntime(25682):    at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
    E/AndroidRuntime(25682):    at android.view.View.<init>(View.java:3721)
    E/AndroidRuntime(25682):    at android.view.ViewGroup.<init>(ViewGroup.java:480)
    E/AndroidRuntime(25682):    at android.widget.FrameLayout.<init>(FrameLayout.java:101)
    E/AndroidRuntime(25682):    at android.widget.FrameLayout.<init>(FrameLayout.java:97)
    E/AndroidRuntime(25682):    ... 28 more
    E/AndroidRuntime(25682): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a 'drawable' attribute or child tag defining a drawable
    E/AndroidRuntime(25682):    at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:181)
    E/AndroidRuntime(25682):    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:990)
    E/AndroidRuntime(25682):    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:930)
    E/AndroidRuntime(25682):    at android.content.res.Resources.loadDrawable(Resources.java:3435)
    E/AndroidRuntime(25682):    ... 33 more

当我将选择器移动到res / drawable并将布局中的行更改为android:background="@drawable/green_selector"

时,我得到的错误基本相同

有谁知道这里发生了什么?根据{{​​3}},这应该可以正常工作。

1 个答案:

答案 0 :(得分:2)

看看你的堆栈跟踪:

<item> tag requires a 'drawable' attribute or child tag defining a drawable

根据堆栈跟踪,您需要在选择器中定义背景子项而不是颜色子项。

<强> R.drawable.green_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:background="@drawable/background_pressed" android:state_pressed="true" />
    <item android:background="@drawable/background_default" />
</selector>

因此你还需要创建两个新的drawable:background_pressed,background_default像这样:

<强> R.drawable.background_pressed

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <solid android:color="@color/color_pressed" />
</shape>