1

我有以下布局:

<RelativeLayout
    android:layout_height="30dp"
    android:layout_width="100dp"
    android:background="@drawable/bg"
    android:clickable="true"
    android:focusable="true">

    <Button
        android:id="@+id/btn"
        android:background="@android:color/transparent"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:clickable="false"
        android:focusable="false"
        android:text="Click"
        android:layout_centerInParent="true" />

我希望在RelativeLayout单击按钮时全部聚焦,上面的代码按预期工作。

无论我点击文本还是空白区域,RelativeLayout都会改变它的背景颜色。

但是,当我像这样向按钮添加 Onclick 侦听器时:

    btn = (Button) findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        }
    });

然后当我点击按钮时行为发生了变化,如果我点击按钮其父级的布局不会改变,只有当我点击空白区域时,RelativeLayout才会改变背景。

看这张图(当鼠标按下时它们都被捕获):

在此处输入图像描述

我想知道是否有任何文档可以解释这种现象?

现在,我必须直接将点击监听器添加到RelativeLayout,还有其他选择吗?


更新完整的 layout.xml:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:padding="10dp"
    android:layout_height="match_parent">

    <LinearLayout
        android:background="@drawable/bg"
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:padding="5dp"
        android:focusable="true"
        android:clickable="true">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_height="wrap_content"
            android:layout_width="match_parent">

            <TextView
                android:text="Name"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:layout_weight="1" />

            <TextView
                android:text="Detail"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:gravity="center" />
        </LinearLayout>

        <LinearLayout
            android:orientation="horizontal"
            android:clickable="true"
            android:focusable="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_height="wrap_content"
            android:layout_width="match_parent">

            <RelativeLayout
                android:background="@drawable/bg"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:layout_weight="1">

                <Button
                    android:id="@+id/btn"
                    android:background="@android:color/transparent"
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:clickable="false"
                    android:focusable="false"
                    android:text="Action1" />
            </RelativeLayout>

            <TextView
                android:layout_height="20dp"
                android:layout_width="1dp"
                android:text="|"
                android:layout_weight="0"
                android:layout_marginRight="5dp" />

            <RelativeLayout
                android:background="@drawable/bg"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:layout_weight="1">

                <Button
                    android:id="@+id/btn2"
                    android:background="@android:color/transparent"
                    android:layout_height="wrap_content"
                    android:layout_width="wrap_content"
                    android:clickable="false"
                    android:focusable="false"
                    android:text="Action2" />
            </RelativeLayout>
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

现在我有两个问题:

1 单击文本时,按钮不会改变其背景。

2 如果我点击 的空白区域btn1,那么btn1btn2都会改变它的背景。

目前效果:

在此处输入图像描述

4

2 回答 2

0

如果视图不可点击,则setOnClickListener()将使其可点击。另一种选择可能是直接操作可点击属性。

于 2013-11-05T04:43:03.060 回答
0

当子元素消耗点击事件时,其父布局不会被委派操作,如果您希望父 RelativeLayout 处理点击事件,则覆盖 RelativeLayout 的点击侦听器,而不是按钮。

于 2015-11-30T08:38:36.230 回答