将Android按钮的“background”更改为不同的可绘制对象。

14

我是个Android和Java新手,但我已经成功自学,并且在stackoverflow上找到了大部分问题的答案,无需提问。 直到现在...

接下来说说我的问题,我有很多彩色按钮,当点击它们时,会变成一系列不同颜色。

例如,定义了许多按钮:

<Button
   android:id="@+id/button17"
   android:layout_width="0dp"
   android:layout_height="fill_parent"
   android:layout_weight="1"
   android:background="@drawable/orange_button"
   android:gravity="center"
   android:onClick="onClick" />

请问如何使用代码更改android:background,例如当按钮被点击时将上面的示例更改为黄色。

在下面的代码中,clickedButton是需要更改背景的按钮的ID。

public void onClick(View v) {
    int id=v.getId();
    String clickedButton = getResources().getResourceEntryName(id);

    Change button to Yellow here??

    // Temporary code below to check which button was pressed
    // and convert its number to an integer to eventually access an array

    final TextView tvGameTimer = (TextView) findViewById(R.id.tvGameTimer);
    int buttonNumber = Integer.parseInt(clickedButton.substring(6,8));
    tvGameTimer.setText("" + buttonNumber);

    }

我正在使用自定义按钮样式来定义按钮颜色:

res/drawable/yellow_button.xml
res/drawable/blue_button.xml
res/drawable/red_button.xml
res/drawable/orange_button.xml
res/drawable/green_button.xml

目前我只需要知道如何将按钮从橙色更改为黄色。然后,我可以根据应用程序需要添加更改颜色的逻辑。

非常感谢任何帮助。

2个回答

27

我假设您发布的 onClick 方法是相同按钮的方法,您正在尝试更改其背景。请使用此代码。

  v.setBackgroundResource(R.drawable.yellow_button);

如果onClick不是同一个按钮的方法,那么使用

  findViewById(R.id.button17).setBackgroundResource(R.drawable.yellow_button);

1
哇,真是一个不错的社群!您说得对。onClick 方法就在我需要更改的按钮上,所以您的第一个解决方案一次成功了。现在,如果单击按钮,则所有按钮都会变成黄色!我现在可以继续进行逻辑了。谢谢。 - Keith Hirst
当我从一个活动离开并转到另一个活动,然后返回到第一个活动时,背景不会恢复为原始绘图。 - Si8
@SiKni8 为了达到你想要的效果,你应该使用<selector>。 - jaimin

2
Button btn = (Button) findViewById(R.id.button17);
btn.setBackground(this.getResources().getDrawable(R.drawable.yellow_button));

尝试这个。


类型Resources中的getDrawable(int)方法已被弃用。 - Hardik Joshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接