我正在尝试在FrameLayout中创建文本,因此它看起来像这样:
但是,我希望它在触摸时有不同的颜色。所以,我用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}},这应该可以正常工作。
答案 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>