如何在仅通过XML单击时更改按钮的颜色(没有其他可绘制的)?

时间:2014-02-15 00:27:47

标签: java android xml android-layout imagebutton

我希望在按下或聚焦按钮时更改按钮的颜色,或者实际上是任何状态。但是,我想不仅通过XML,而且不使用另一个drawable。解决此问题的先前问题,例如Highlight a button when it pressed without using two drawable?How to Change color of Button in Android when Clicked?,无论是通过编程还是通过XML进行编程,都可以执行此操作。是否有我可以在button.xml文件中设置的属性,或者可以在突出显示或单击时更改视图的背景颜色,而无需咨询Java?

以下是我的activity_main.xml的代码。如果它已经不是很明显了,我正在使用游戏板的静态图像来进行电话井字游戏。

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

<ImageView
    android:id="@+id/gameBoard"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:contentDescription="@string/gameboard"
    android:src="@drawable/gameboard" />

<ImageButton
    android:id="@+id/squareOne"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginBottom="288dp"
    android:layout_marginRight="219dp"
    android:layout_marginTop="71dp"
    android:background="@android:color/transparent"
    android:contentDescription="@string/top_left"
    android:src="@drawable/blank_button" />

<ImageButton
    android:id="@+id/squareTwo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/squareOne"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/squareOne"
    android:layout_marginLeft="110dp"
    android:layout_marginRight="108dp"
    android:background="@android:color/transparent"
    android:contentDescription="@string/top_middle"
    android:src="@drawable/blank_button" />

<ImageButton
    android:id="@+id/squareThree"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/squareTwo"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/squareTwo"
    android:minWidth="100dp"
    android:background="@android:color/transparent"
    android:contentDescription="@string/top_right"
    android:src="@drawable/blank_button" />

<ImageButton
    android:id="@+id/squareFour"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignRight="@+id/squareOne"
    android:layout_below="@+id/squareTwo"
    android:layout_marginBottom="179dp"
    android:layout_marginTop="9dp"
    android:background="@android:color/transparent"
    android:contentDescription="@string/middle_left"
    android:src="@drawable/blank_button" />

<ImageButton
    android:id="@+id/squareFive"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/squareFour"
    android:layout_alignLeft="@+id/squareTwo"
    android:layout_alignRight="@+id/squareTwo"
    android:layout_alignTop="@+id/squareFour"
    android:background="@android:color/transparent"
    android:contentDescription="@string/middle"
    android:src="@drawable/blank_button" />

<ImageButton
    android:id="@+id/squareSix"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/squareThree"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/squareFive"
    android:layout_marginBottom="178dp"
    android:background="@android:color/transparent"
    android:contentDescription="@string/middle_right"
    android:src="@drawable/blank_button" />

<ImageButton
    android:id="@+id/squareSeven"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignRight="@+id/squareFour"
    android:layout_below="@+id/squareFive"
    android:layout_marginBottom="70dp"
    android:layout_marginTop="10dp"
    android:background="@android:color/transparent"
    android:contentDescription="@string/bottom_left"
    android:src="@drawable/blank_button" />

<ImageButton
    android:id="@+id/squareEight"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/squareSeven"
    android:layout_alignLeft="@+id/squareFive"
    android:layout_alignRight="@+id/squareFive"
    android:layout_alignTop="@+id/squareSeven"
    android:background="@android:color/transparent"
    android:contentDescription="@string/bottom"
    android:src="@drawable/blank_button" />

<ImageButton
    android:id="@+id/squareNine"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/squareEight"
    android:layout_alignLeft="@+id/squareSix"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/squareEight"
    android:background="@android:color/transparent"
    android:contentDescription="@string/bottom_right"
    android:src="@drawable/blank_button" />

</RelativeLayout>

我使用blank_button.png文件并将其拉伸到gameBoard ImageView上的每个方块上。我知道我从你们所有的人那里知道我应该使用相对布局,但我只是想在特定类型的设备上运行这个应用程序。

1 个答案:

答案 0 :(得分:0)

通过xml,您可以通过google搜索。我将向您展示一种解决问题的方法。 A forum which mentioned this problem

当然,如果您不使用xml,则必须将其更改为java代码。这很简单,但这意味着它不会显示复杂的效果。

补充:覆盖onStateChange方法,你应该覆盖你的小部件。