如何使用XML设置图像按钮的选定状态

20

我有一个如下定义的图像按钮。

<ImageButton 
    android:text="Play"
    android:src="@drawable/playpause"
    android:background="@drawable/opaque" 
    android:gravity="center_horizontal"
    android:id="@+id/player_ctrl_btn"
    android:layout_width="fill_parent" 
    android:padding="0px"
    android:layout_height="wrap_content" />

我希望将按钮的默认状态设置为选中。在代码中,我可以这样写:

playBtn.setSelected(true);

那么在xml中是否也可以实现呢?

3个回答

31

很抱歉,看起来您不能这样做!


1
为什么这是一个可接受的答案?你可以通过引用另一个定义了所选状态的xml来实现。如果你没有多个图像(一个被选中,一个未被选中),可以使用不透明度来模拟印象。 - portfoliobuilder
4
@portfoliobuilder,这并不是问题所询问的内容。 - Jarett Millard
请查看以下答案! - JonZarate

14

解决问题的一个新方法是使用 DataBinding

  1. 在你的代码中创建一个 @BindingAdapter
@BindingAdapter("is_selected")
fun setSelected(view: View, selected: Boolean) {
    view.isSelected = selected
}
  1. 在您的xml中使用DataBinding
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
    </data>

    <ImageButton
        android:id="@+id/player_ctrl_btn"
        is_selected="@{true}"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/opaque"
        android:gravity="center_horizontal"
        android:padding="0px"
        android:src="@drawable/playpause"
        android:text="Play" />
</layout>

重要提示:请记住,您需要在此处使用 DataBinding。因此,您不能简单地调用 add is_selected="true"(因为它将失败且不会告诉您原因),您需要添加 is_selected="@{true}"


尼古拉斯的回答澄清了BindingAdapter似乎更好。 - JonZarate
好的,它比我写这个答案时年轻了6个月,我猜这就是区别所在,因为当时它并不像现在这样工作。 - Bartek Lipinski

7
无需创建BindingAdapter方法,只需启用DataBinding并输入以下内容即可:

DataBinding

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

<data>
</data>

<ImageButton
    android:id="@+id/player_ctrl_btn"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/opaque"
    android:gravity="center_horizontal"
    android:padding="0px"
    android:src="@drawable/playpause"
    android:text="Play"
    app:selected="@{true}" />
</layout>

无法工作... - sharib ahmed

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