【问题标题】:How do I set the selected state of an image button with xml如何使用 xml 设置图像按钮的选定状态
【发布时间】:2010-02-10 13:58:25
【问题描述】:

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

<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 中做到这一点?

【问题讨论】:

    标签: xml android user-interface imagebutton


    【解决方案1】:

    看起来你不能——抱歉!

    【讨论】:

    • 为什么这是一个可以接受的答案?您可以通过引用另一个定义了您选择的状态的 xml 来做到这一点。如果您没有多张图片(一张已选择,一张未选择),请使用不透明度来模拟展示
    • @portfoliobuilder 这不是问题要问的。
    • 检查下面的答案!
    【解决方案2】:

    解决问题的新方法是使用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的回答似乎更好
    • 好吧,它比我年轻了 6 个月,我想这一切都不同了,因为当我写这个答案时它并没有像那样工作?
    【解决方案3】:

    无需创建 BindingAdapter 方法,只需启用DataBidning 并输入:

    <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>
    

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2021-11-05
      相关资源
      最近更新 更多