Android相对布局点击后改变颜色

25

如何在点击一个RelativeLayout时更改其颜色,就像普通按钮一样,并获得视觉反馈?

我尝试使用与背景属性绑定的选择器来实现:

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

我将其用于布局的背景...

android:background="@color/layout_selector"

但这给出了一个膨胀异常...

有什么想法吗?

4个回答

52

请尝试以下步骤:

res --> values 文件夹中创建 color.xml 文件,并添加以下内容:

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="black">#000000</color> 
    <color name="white">#ffffff</color>
</resources>

由于选择器中的<item>标签需要一个可绘制属性或定义可绘制的子标签,因此您的layout_selector.xml文件(保存在res --> drawable中)应该像这样:

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

同样地,如之前所述,相对布局应该是可点击的(android:clickable="true"),

并且将其背景设置为android:background="@drawable/layout_selector"

希望有所帮助。


2
非常好,这个像魔法一样运行。实际问题在于它必须是一个可绘制资源,而不是在android:color列表中。 - GuyFawkes
@AVirvara:我已经完全按照您说的做了。当没有焦点时,它显示白色背景,但是当我点击它时,它不会切换到黑色,我不知道为什么?我已经设置了所有属性。欢迎任何建议。 - Kushal Shah
就像GuyFawkes所说,当你将选择器分配给具有“android:background”属性的布局时,在选择器中使用“android:color”会导致异常。 - Someone Somewhere
非常感谢。在移除了android:state_enabled="false"之后,它的工作正常。 - madhu527
在我的情况下,只有在删除 android:state_enabled="false" 后才能正常工作,并且在 RelativeLayout 中使用或不使用 android:clickable="true" 都可以正常工作。 - Mohamed Khamis

10

在您的RelativeLayout的android:background属性上使用selector。同时使布局可点击(通过android:clickable="true")。


我按照你的建议尝试了,但它不起作用。已相应地编辑帖子。 - GuyFawkes
你把选择器文件放在哪里了?如果你把它们放在 /drawable/ 目录下,请使用 @drawable/layout_selector。 - Kocus
我把文件复制到了drawable文件夹中,并按照您的建议使用它,但仍然出现相同的错误...“无法启动活动ComponentInfo{com.app/com.views.MainView}:android.view.InflateException:二进制XML文件第50行:膨胀类<unknown>”。 - GuyFawkes
由于我不知道的原因,android:background 不能使用颜色选择器 - 必须使用可绘制选择器(这意味着您应该将 android:color 标签替换为 android:drawable,并在可绘制对象中放置一些 1x1 像素的黑 / 白 PNG。这不是最好的解决方案,但是... - Kocus
据我所知,背景资源必须是可绘制的,而不是颜色列表(请参阅https://dev59.com/_m865IYBdhLWcg3wKLT6) - Kocus

0

布局不会显示在屏幕上,它们只能包含视图。您应该添加一些视图,然后为该视图添加onClick监听器。

可能的重复:Android可点击布局


0
将layout_selector.xml放入drawable文件夹中,例如(res> drawable > layout_selector.xml),然后将android:background="@color/layout_selector"更改为android:background="@drawable/layout_selector"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接