我有9个按钮。
每个都与red
,blue
或green
相对应。
用户必须单击一个绿色框,然后游戏给他一个点。
因此,为了检查盒子是否为绿色,我需要定义它,从中获取颜色并将其与用户必须选择的颜色进行比较,但我遇到了问题。
问题在于定义点击的按钮以便将其用于getColor()
我可以制作9个功能,首先定义第一个按钮,第二个定义第二个按钮等。
但有没有更快的方法呢?
我可以做点什么吗
Button button = (Button)findViewById(R.id.THIS_CURRENT_BUTTON);
答案 0 :(得分:1)
是。因为onClick侦听器会将单击的视图传递给它,所以您只需创建一个onClick侦听器并将其分配给所有按钮:
View.OnClickListener listenerToCheckColor = new View.OnClickListener () {
@Override
public void onClick(View v) {
Button button = (Button)v;
if (((ColorDrawable)button.getBackground()).getColor() == yourGreenColor)
{
// + 1 point
}
}
});
您可以在此行Button b = (Button)v;
中看到,已按下的视图会转换为按钮,并为您提供一个与Button button = (Button)findViewById(R.id.THIS_CURRENT_BUTTON);
相同的按钮。
创建侦听器后,需要将其分配给每个按钮:
for(Button button : myArrayOfButtons){
button.setOnClickListener(listenerToCheckColor);
}
答案 1 :(得分:0)
您可以在xml中使用View.setTag()
或android:tag
。当设置按钮绿色时,您可以通过代码btn.setTag("green");
设置绿色标记。如果您想知道按钮的颜色,可以通过以下代码了解:
String tag = (String) btn.getTag();
if ("green".equals(tag)) {
//button is green
}
答案 2 :(得分:0)
您不需要单独的9项功能。您可以使用一个功能来检查单击了哪个彩色按钮。
XML布局:
将android:onClick="btnPressed"
添加到所有按钮,如下所示
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="btnPressed"
android:text="Button"
android:background="@color/green"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="0dp" />
颜色XML:
在资源XML中创建颜色,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="green">#008000</color>
<color name="red">#FF0000</color>
<color name="yellow">#FFFF00</color>
</resources>
MainActivity Java文件:
创建btnPressed
方法并检查单击了哪个彩色按钮
public void btnPressed(View view) {
int colorId = ((ColorDrawable) view.getBackground()).getColor();
int greenColor = ContextCompat.getColor(getApplicationContext(), R.color.green);
if (greenColor == colorId) {
// Green colored button is clicked
// Do your code here
} else {
// Other colored button clicked
}
}
希望这会有所帮助!