gpt4 book ai didi

android - NotFoundException 将 FrameLayout 的背景属性设置为颜色状态列表,将 textColor 设置为相同颜色效果很好

转载 作者:行者123 更新时间:2023-11-29 20:52:12 27 4
gpt4 key购买 nike

我正在尝试在 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"

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

有人知道这里发生了什么吗?根据the documentation ,这应该可以正常工作。

最佳答案

看看你的堆栈跟踪:

<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>

因此,您还需要创建两个新的可绘制对象: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>

关于android - NotFoundException 将 FrameLayout 的背景属性设置为颜色状态列表,将 textColor 设置为相同颜色效果很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28839666/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com