Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TextView背景色上的选择器_Android - Fatal编程技术网

Android TextView背景色上的选择器

Android TextView背景色上的选择器,android,Android,我试图在用户触摸AndroidTextView小部件时更改其背景色。我为此创建了一个选择器,它存储在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="tru

我试图在用户触摸Android
TextView
小部件时更改其背景色。我为此创建了一个选择器,它存储在
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>

文本视图
可点击的
属性是
真的
,以防感兴趣

当我将此选择器分配给
TextView
作为
android:background=“@color/selector”
时,我在运行时遇到以下异常:

错误/AndroidRuntime(13130):由以下原因引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#6:tag需要一个“drawable”属性或定义drawable的子标记

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

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

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


在Android中,将背景颜色选择器应用于
文本视图的正确方法是什么?

这里的问题是无法使用颜色选择器定义背景颜色,您需要一个可绘制的选择器。因此,必要的更改如下所示:

<?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>
<?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"
最后,您可以这样使用它:

<?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>
<?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"
注意:OP绘制图像资源的原因可能是因为他试图仅引用仍在颜色目录中但使用
@drawable
的资源,因此导致ID冲突,选择了错误的资源


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

Benoit的解决方案有效,但是你真的不需要花费太多的开销来绘制形状。由于颜色可以绘制,只需在/res/values/colors.xml文件中定义一种颜色:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="semitransparent_white">#77ffffff</color>
</resources>

#77ffffff
然后在选择器中使用:

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

以上问题的更简单解决方案:

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

将其保存在drawable文件夹中,您就可以开始了。

即使这样也可以

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

对于正在搜索而不创建背景扇区的用户,只需将这些行添加到
TextView

android:background="?android:attr/selectableItemBackground"
android:clickable="true"
此外,要使其可选择,请使用:

android:textIsSelectable="true"


谢谢你,贝诺特。问题解决了(我必须承认,我不记得我到底是怎么做的),项目成功完成了。我很感激你回到这里来发帖,帮助人们在将来遇到同样的问题,伟大的精神!我做不到。我尝试将其应用于按钮,它确实将背景设置为选择器的默认颜色,但它不会更改为在“按下”状态中定义的形状。我会错过什么?我可能会提出一个新问题,以防万一你能给我指出正确的方向。@Maragues如果没有看到任何代码,很难判断。我建议你打开一个新问题,发布相关代码,这样我们就可以找出可能的错误。你也可以在这篇文章中添加评论,并链接到你的新文章。为什么不直接在你的选择项中使用“drawable=“@color/your_color”呢?你不需要定义任何形状或任何其他文件,只需要在values/colors.xml中定义颜色(不硬编码颜色总是好的)。不工作。它向我显示的颜色与我在shape xml中声明的颜色不同。出于某种原因,您的解决方案没有显示颜色,而是显示我的drawable resources文件夹中的随机图像。我试图清理项目/fix properties/resave/重新打开eclipse,因为它看起来很奇怪,但没有用。奇怪。@Yahel您可能命名了color drawable resource与实际的drawable文件相同?@Jona:Nope,但drawable名为background\u application,颜色drawable名为background\u white\u transparent。两者都有背景…我在其他线程中看到其他线程也发生同样的事情,所以我将其作为众多Android bug之一提交,并修改了我的enti重新布局以解决此问题。@Yahel Mmm…我看到了这个问题,但在我的情况下,文件名不同…在这里签出我的问题无法使其正常工作,Benoit Martin的回答很好。颜色可以解释为可绘制颜色。结果到底有何错误?它不是显示颜色,而是显示我可绘制资源中的图像背景。如果您使用的是android:drawable,而不是android:color,那么上面的内容应该会起作用-至少在这种情况下,它对我是有效的:android:drawable=“@color/my_custom_color”。我的颜色是在values/colors.xml中定义的。这可能有效,但官方不支持(android Studio将其视为错误)@ BLASHEX奇怪。我在Eclipse中工作很好。它可能是一个LIT错误,如果是,您应该能够禁用或忽略它。这是我将要考虑的解决方案。<代码> <代码>在语义上与<代码> <代码>相同。在这种情况下,我需要更改<代码> <代码> > <代码> < /代码>颜色属性。ew颜色,但不带背景,因为实际上背面的颜色是可着色的,这是实现上述所有功能的最佳和最简单的解决方案。