关于View设置selector不支持state_pressed的问题

  1. 根据官方文档给出的提示:selector中item的顺序很重要,normal的item要放在最后;
  2. 要想selector的state_pressed item有效,View的clickable必须为true,而如果执行了View.setOnClickListener,View会自动设置clickable.
好的,让我来给你一个Selector复杂例子,实现点击button后显示不一样的样式。 首先,我们需要定义两种不同的样式,一种是未选中状态下的样式,另一种是选中状态下的样式。我们可以使用XML文件来定义这两种样式。比如,我们创建一个名为`button_bg.xml`的XML文件,内容如下: ```xml <!-- 未选中状态下的样式 --> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/bg_normal" android:state_pressed="false" /> <item android:drawable="@drawable/bg_pressed" android:state_pressed="true" /> </selector> ``` 在这个XML文件中,我们使用了`selector`元素来定义两个`item`元素,分别表示未选中状态下和选中状态下的样式。每个`item`元素中都定义了一个`android:drawable`属性,表示该状态下应该显示的样式。我们在未选中状态下使用`bg_normal`来表示普通状态下的样式,在选中状态下使用`bg_pressed`来表示按下状态下的样式。 接下来,我们在我们的布局文件中使用这个XML文件来设置button的背景。比如: ```xml <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button_bg" android:text="Click me!" /> ``` 这个button的背景就会根据它的选中状态来显示不同的样式了。例如,当用户点击button时,它的背景就会变成`bg_pressed`,当用户松开button时,它的背景就会变成`bg_normal`。 最后,我们需要在代码中设置button的选中状态。我们可以在button的点击事件中通过代码来实现。比如: ```java Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 切换button的选中状态 button.setSelected(!button.isSelected()); } }); ``` 在这个代码中,我们使用`setSelected()`方法来切换button的选中状态。当button被选中时,它的背景就会变成`bg_pressed`,反之,则为`bg_normal`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值