我有一个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>