我试图在用户touch Android TextView小部件时更改其背景色.我为此创建了一个 Select 器,它存储在res/color/selector.xml中,大致如下所示:

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

如果需要的话,TextViewclickable属性是102.

当我将这个 Select 器分配给TextView as android:background="@color/selector"时,我在运行时得到以下异常:

错误/AndroidRuntime(13130):原因:org.拉.v1.XmlPullParserException:二进制XML文件行#6:tag需要一个"drawable"属性或定义drawable的子标记

当我将属性更改为drawable时,它可以工作,但结果看起来完全错误,因为ID似乎被解释为图像引用,而不是 colored颜色 引用(如"drawable"所示).

让我困惑的是,我可以直接将 colored颜色 引用设置为背景属性,例如"@color/black".这是工作的预期.使用 Select 器不起作用.

我也可以将 Select 器用作textColor而不会出现问题.

What's the correct way to apply a background-color-selector to a 100 in Android?

推荐答案

这里的问题是您不能使用 colored颜色 Select 器定义背景 colored颜色 ,您需要drawable Select 器.因此,必要的更改如下所示:

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

您还需要将该资源移动到drawable目录中,因为它本身不是一个 colored颜色 Select 器,所以在那里更有意义.

然后你必须像这样创建res/drawable/selected_state.xml个文件:

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

最后,你可以这样使用它:

android:background="@drawable/selector"

Note:OP绘制图像资源的原因可能是因为他试图引用仍在 colored颜色 目录中但使用@drawable的资源,结果导致ID冲突, Select 了错误的资源.

希望这仍然能帮助一些人,即使OP现在可能已经解决了他的问题.

Android相关问答推荐

更新Jetpack Compose打破了动态色彩

Android开发:主题排版不适用于按钮文本

如何在Android中编写挂起函数和stateflow的单元测试

找不到类MultipartBody;的序列化程序

Android 14预测性背部手势-闪烁的白色背景色

Kotlin - 在继续之前如何等待这个协程完成?

Android 应用程序从 Android Studio 安装,但不是作为 .apk 在外部安装.抛出java.lang.UnsatisfiedLinkError

需要在按钮 onclick 上从 string.xml 获取值. @Composable 调用只能在@Composable 函数的上下文中发生

当父布局的背景为浅色时,Android ProgressBar 背景 colored颜色 变为灰色

Android:使用依赖项 ViewModelProviderFactory 初始化 ViewModel 的正确方法

是否可以按照干净的体系 struct 将活动实例传递给视图模型

为什么我要使用 $version 而不是2.7.0?

Android apk 不工作

在 Jetpack Compose 中使用 ViewModel 实现 startActivity 的最佳实践

单击过go 的文章时 NewsApp 崩溃

在compose中,为什么修改List元素的属性,LazyColumn不刷新

无法通过 retrofit 解析对 kotlin 数据类的 xml 响应

前台服务通知需要几秒钟才能显示

在 jetpack compose 中使用 .shadow 和 Button 会导致问题

线圈单元测试 - 如何做到这一点?