OnClick Listener按钮按下状态

时间:2015-10-12 13:07:18

标签: android android-button

我有四个按钮,用户应该一次选择一个按钮。

<Button
    android:id="@+id/button1"
    android:layout_weight="1"
    android:background="@drawable/btnindicator"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:drawableLeft="@drawable/btnbg"
    android:gravity="center"
    android:padding="20dip"
    android:text="Button1"
    android:textColor="#000000" />

<Button
    android:id="@+id/button2"
    android:layout_weight="1"
    android:background="@drawable/btnindicator"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:drawableLeft="@drawable/btnbg"
    android:gravity="center"
    android:padding="20dip"
    android:text="Button2"
    android:textColor="#000000" />

<Button
    android:id="@+id/button3"
    android:layout_weight="1"
    android:background="@drawable/btnindicator"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:drawableLeft="@drawable/btnbg"
    android:gravity="center"
    android:padding="20dip"
    android:text="Button3"
    android:textColor="#000000" />

<Button
    android:id="@+id/button4"
    android:layout_weight="1"
    android:background="@drawable/btnindicator"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:drawableLeft="@drawable/btnbg"
    android:gravity="center"
    android:padding="20dip"
    android:text="Button4"
    android:textColor="#000000" />

这是btnindicator.xml,用于显示按钮的按下/聚焦状态。

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

    <item android:state_pressed="true">
        <shape>
            <gradient android:angle="270" android:endColor="@color/LightBlue" android:startColor="@color/DodgerBlue" />
            <stroke android:width="3dp" android:color="@color/PowderBlue" />
            <corners android:radius="3dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>

    <item android:state_focused="true">
        <shape>
            <gradient android:angle="270" android:endColor="@color/LightBlue" android:startColor="@color/DodgerBlue" />
            <stroke android:width="3dp" android:color="@color/PowderBlue" />
            <corners android:radius="3dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>

    <item>
        <shape>
            <gradient android:angle="270" android:endColor="@color/Wheat" android:startColor="@color/WhiteSmoke" />
            <stroke android:width="3dp" android:color="@color/FloralWhite" />
            <corners android:radius="3dp" />
            <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
        </shape>
    </item>
</selector>

以下是侦听Click侦听器的代码

public Button button1,button2,button3,button4;
button1 = (Button) view.findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG,"Clicked button1");
                selected = true;
            }
        });

但问题是只有当按钮点击两次时,才会触发非聚焦按钮的点击事件。

例如:如果按下button1,那么如果我在button2上单击两次,则会调用click listener上的button2。

我更改了button1.setOnFocusChangeListener()button1.setOnTouchListener(),两者都运行良好。

但是我无法解决setOnClickListener方法的问题..

1 个答案:

答案 0 :(得分:1)

设置为根布局

android:splitMotionEvents="false"

希望,这会对你有帮助。