state_pressed 事件在单击时为错误的按钮设置背景

state_pressed event is setting background on wrong button while click

我在线性布局中使用按钮,Table 行和Table 布局,也许这有一些影响。

问题是 state_pressed 无法正常工作。当我按下按钮 A/B/C/D 时,Android 正在选择按钮 D(它稍暗)。

您可以在图片上看到,阴影效果正常,但背景设置总是错误的按钮 D(右下角)。

单击任何按钮后,我以编程方式更改其背景并将背景设置为红色或绿色。它工作正常。

红色按钮正在选择,因为我们的对手选择了这个答案。它以编程方式设置,对我的错误没有任何影响。

这是我的布局代码

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/rozgrywka"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/icon2"
        android:background="#ffffffff"
        android:padding="5dp"
        android:weightSum="1">

        <TableRow
            android:layout_width="fill_parent"
            android:layout_weight="0.5">

            <LinearLayout
                android:id="@+id/first"
                android:layout_height="fill_parent"
                android:layout_weight="1">

                <Button
                    android:id="@+id/buttonA"
                    android:layout_width="50dp"
                    android:layout_height="fill_parent"
                    android:layout_column="1"
                    android:layout_margin="5dp"
                    android:layout_weight=".5"
                    android:background="@drawable/rozgrywkabutton"
                    android:gravity="center_vertical|center_horizontal"
                    android:onClick="odpA"
                    android:text="A"
                    android:textAlignment="center"
                    android:textColor="#ff141414"
                    android:textSize="14dp" />

                <Button
                    android:id="@+id/buttonC"
                    android:layout_width="50dp"
                    android:layout_height="fill_parent"
                    android:layout_column="2"
                    android:layout_margin="5dp"
                    android:layout_weight=".5"
                    android:background="@drawable/rozgrywkabutton"
                    android:gravity="center_vertical|center_horizontal"
                    android:onClick="odpC"
                    android:text="C"
                    android:textAlignment="center"
                    android:textColor="#ff141414"
                    android:textSize="14dp" />

            </LinearLayout>
        </TableRow>

        <TableRow
            android:layout_weight="0.5">

            <LinearLayout
                android:layout_height="fill_parent"
                android:layout_alignStart="@id/first"
                android:layout_weight="1"
                android:id="@+id/second">


                <Button
                    android:id="@+id/buttonB"
                    android:layout_width="50dp"
                    android:layout_height="fill_parent"
                    android:layout_column="2"
                    android:layout_margin="5dp"
                    android:layout_weight=".5"
                    android:background="@drawable/rozgrywkabutton"
                    android:gravity="center_vertical|center_horizontal"
                    android:onClick="odpB"
                    android:text="B"
                    android:textAlignment="center"
                    android:textColor="#ff141414"
                    android:textSize="14dp" />

                <Button
                    android:id="@+id/buttonD"
                    android:layout_width="50dp"
                    android:layout_height="fill_parent"
                    android:layout_column="1"
                    android:layout_margin="5dp"
                    android:layout_weight=".5"
                    android:background="@drawable/rozgrywkabutton"
                    android:gravity="center_vertical|center_horizontal"
                    android:onClick="odpD"
                    android:text="D"
                    android:textAlignment="center"
                    android:textColor="#ff141414"
                    android:textSize="14dp" />

            </LinearLayout>

        </TableRow>

    </TableLayout>

可绘制rozgrywkabutton.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" >
        <shape android:shape="rectangle"  >
            <corners android:radius="5dp" />
            <stroke android:width="1dip" android:color="#c7c7c7" />
            <gradient android:angle="-90" android:startColor="#d3ced3" android:endColor="#b6b2b6"  />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle"  >
            <corners android:radius="5dp" />
            <stroke android:width="1dip" android:color="#5e7974" />
            <solid android:color="#58857e"/>
        </shape>
    </item>
    <item >
        <shape android:shape="rectangle"  >
            <corners android:radius="5dp" />
            <stroke android:width="1dip" android:color="#c7c7c7" />
            <gradient android:angle="-90" android:startColor="#e4e4e4" android:endColor="#cbc7cb" />
        </shape>
    </item>
</selector>

我使用静态函数将按钮设置为默认按钮。

public static void setBacground(Button buttonA, Drawable draw) {
    int sdk = android.os.Build.VERSION.SDK_INT;
    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        buttonA.setBackgroundDrawable( draw);
    } else {
        buttonA.setBackground( draw);
    }
}

并在我的函数中使我的按钮看起来默认

Drawable defualt = getResources().getDrawable(R.drawable.rozgrywkabutton);
Global.setBacground(ButtonA, defualt);
Global.setBacground(ButtonB, defualt);
Global.setBacground(ButtonC, defualt);
Global.setBacground(ButtonD, defualt);

当我将其更改为

Global.setBacground(ButtonA, getResources().getDrawable(R.drawable.rozgrywkabutton));
Global.setBacground(ButtonB, getResources().getDrawable(R.drawable.rozgrywkabutton));
Global.setBacground(ButtonC, getResources().getDrawable(R.drawable.rozgrywkabutton));
Global.setBacground(ButtonD, getResources().getDrawable(R.drawable.rozgrywkabutton));

一切开始正常工作。谢谢你的时间。