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

时间:2015-06-04 09:26:53

标签: android events layout

我在线性布局,表格行和表格布局中使用按钮,这可能会产生一些影响。

问题是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>

drawable 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>

here is example

1 个答案:

答案 0 :(得分:0)

我使用静态功能使按钮默认。

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));

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