Android - 如何为布局创建一个选择器(如ImageButton选择器)?

问题描述 投票:2回答:2

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

我在ImageButton周围放了一个背景 中的线性布局,如上图所示。

我希望能够改变这个背景(即。线性布局(LinearLayout)的背景而不是ImageButton的背景),当用户点击ImageButton的时候。我可以通过编程来实现,但我想通过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="@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的背景?

先谢谢你! =)

android xml background selector imagebutton
2个回答
4
投票

把选择器设置为你的 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>

在选择器中,用布局背景替换所有按钮的背景。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>

0
投票

我想提问者现在已经死了 :XD)

但这是解决方案

将这两行代码添加到你的布局中。

android:clickable = "true"

android:focusable = "true"

主样本是

我们有这样的约束布局,像.xml和(layout_selector.xml)这样的:。

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/layoutSample"
    android:layout_width="150dp"
    android:layout_height="120dp"
    android:background="@drawable/layout_selector"
    android:clickable="true"
    android:focusable="true">
</androidx.constraintlayout.widget.ConstraintLayout>

而(layout_selector.xml)则是这样的。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_pressed" android:state_pressed="true" /> <!-- pressed -->
    <item android:drawable="@drawable/bg_focused" android:state_focused="true" /> <!-- focused -->
    <item android:drawable="@drawable/bg_default" /> <!-- default -->
</selector>

对于我们之前在选择器中使用的 ( bg_pressed.xml ) 和 ( bg_focused.xml ) 以及 ( bg_default.xml ) ,我们需要将它们声明在 drawable 文件夹中,就像这样。

bg_pressed.xml。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="8dp" />
    <solid android:color="#ffffff" />

    <stroke
    android:width="2dp"
    android:color="#00ff00" />
</shape>

bg_focused.xml。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="8dp" />
    <solid android:color="#ffffff" />

    <stroke
    android:width="2dp"
    android:color="#ff0000" />
</shape>

bg_default.xml 。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="8dp" />
    <solid android:color="#ffffff" />
</shape>

现在把你的图像视图或其他东西放在布局中,然后尝试一些点击:) (阅读问题!)

希望这能帮助你...

© www.soinside.com 2019 - 2024. All rights reserved.