Android – 如何为Layouts创建选择器(如ImageButton选择器)

我有一个ImageButton和一个LinearLayout包装该按钮,如下所示:

<LinearLayout
        android:id="@+id/homeButtonLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/p_buttons_background"
        android:orientation="vertical" >

        <ImageButton
            android:id="@+id/homeButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10px"
            android:background="@drawable/home_icon"
            android:onClick="goBackToCameraScreen" />
    </LinearLayout>

我在LinearLayout中围绕ImageButton放置了一个背景,如上所示.

我希望能够在用户单击ImageButton时更改该背景(即LinearLayout的背景,而不是ImageButton的背景).我可以通过编程方式做到这一点,但我想通过XML来做到这一点.我可以通过编写一个选择器轻松更改ImageButton的背景,如下所示:

    <?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/button_pressed" /> <!-- pressed -->
     <item android:state_focused="true"
       android:drawable="@drawable/button_focused" /> <!-- focused -->
     <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

这完全是我想要的,除了我想要改变LinearLayout背景,而不是ImageButton背景.我怎样才能像上面那样创建一个XML选择器,但这实际上改变了LinearLayout的背景而不是ImageButton背景?

先感谢您!! =)

解决方法:

将选择器设置为LinearLayout并将android:descendantFocusability =“blocksDescendants”添加到它.

在选择器中,用布局背景替换所有按钮背景.

<LinearLayout
    android:id="@+id/homeButtonLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/layout_bg_selector"
    android:orientation="vertical" 
    android:descendantFocusability="blocksDescendants">

    <ImageButton
        android:id="@+id/homeButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10px"
        android:background="@drawable/home_icon"
        android:onClick="goBackToCameraScreen" />
</LinearLayout>

selector layout_bg_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:drawable="#F0F0F0" /> <!-- pressed -->
     <item android:state_focused="true"
       android:drawable="#00F000" /> <!-- focused -->
     <item android:drawable="#0000F0" /> <!-- default -->
</selector>
上一篇:Android:使用选择器更改按钮背景图像和颜色


下一篇:ImageButton Soundboard安卓应用