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>

今、私は2つの問題を抱えています:

1 テキストをクリックしても、ボタンの背景は変わりません。

2 の空白部分をクリックすると、とbtn1の両方が背景を変更します。btn1btn2

現時点での効果:

ここに画像の説明を入力

4

2 に答える 2

0

子要素がクリック イベントを消費する場合、その親レイアウトにはアクションが委任されません。親 RelativeLayout でクリック イベントを処理する場合は、ボタンではなく RelativeLayout のクリック リスナーをオーバーライドします。

于 2015-11-30T08:38:36.230 に答える
0

ビューがクリック可能でない場合、setOnClickListener()はクリック可能にします。別の方法は、おそらくクリック可能な属性を直接操作することです。

于 2013-11-05T04:43:03.060 に答える