Android中如何在点击按钮时改变按钮的颜色?

8
我遇到了一个问题。
我有两个按钮对象。
ButtonA ButtonB
要求:每当我按下ButtonA时,按钮的颜色都应该改变,并且保持不变,直到我点击ButtonB为止。
在单击ButtonB后,同样的操作应适用于ButtonA。
if (v == btn)
{
    btn.setBackground(mActivity.getResources().getDrawable(R.drawable.button_color_chnager));
}

XML:

<item android:state_focused="true" android:state_pressed="true" 
            android:drawable="@drawable/ic_launcher" /> 

1
什么是问题?代码在哪里? - Pankaj Kumar
请发布您尝试过的代码,以便我们帮助您指出代码中的错误。 - 7bluephoenix
6个回答

18

按钮颜色.xml

<?xml version="1.0" encoding="utf-8"?> 
  <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
      <item android:state_focused="true" android:state_pressed="true" 
            android:drawable="@drawable/bgalt" /> 
      <item android:state_focused="false" android:state_pressed="true" 
            android:drawable="@drawable/bgalt" /> 
      <item android:drawable="@drawable/bgnorm" /> 
  </selector>

现在可以像下面这样使用:

b1 = (Button) findViewById(R.id.b1);
b1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
         b2.setBackgroundDrawable(getResources().getDrawable(R.drawable.whatever));
    }
});

b2 = (Button) findViewById(R.id.b2);
b2.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
         b1.setBackgroundDrawable(getResources().getDrawable(R.drawable.whatever));
    }
});

如果我想更改背景颜色而不是背景图片,我应该怎么做? - Prafulla Kumar Sahu

11

试一试:

final Button buttonA = (Button) findViewById(R.id.ButtonA);
final Button buttonB = (Button) findViewById(R.id.ButtonB);

buttonA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
buttonB.setBackgroundColor(Color.CYAN);
}
});

buttonB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
buttonA.setBackgroundColor(Color.RED);
}
});

或者

在drawable文件夹中创建selector.xml并将下面的代码复制到其中:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
  <item android:state_focused="true" android:state_pressed="true" 
    android:drawable="@drawable/focused_pressed" /> 
  <item android:state_focused="false" android:state_pressed="true" 
    android:drawable="@drawable/pressed" /> 
  <item android:drawable="@drawable/normal" /> 
</selector>

在您的布局中复制此代码以获得按钮A

<Button
    android:id="@+id/buttonA"
    style="@drawable/test"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="Button A" />

5
请使用以下代码:
Boolean isOnePressed = false, isSecondPlace = false;
b1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                isOnePressed = true;
                b1.setBackgroundColor(Color.BLUE);
                if (isSecondPlace) {
                    b2.setBackgroundColor(Color.WHITE);
                    isSecondPlace = false;
                }

            }
        });
        b2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                b2.setBackgroundColor(Color.BLUE);
                isSecondPlace = true;
                if (isOnePressed) {
                    b1.setBackgroundColor(Color.WHITE);
                    isOnePressed = false;
                }

            }
        });

希望这能有所帮助...

3

我没有测试过以下代码,但我认为这对你会有帮助。

private Drawable defaultDrawableA;
private Drawable defaultDrawableB;
private Button buttonA , buttonB;


buttonA = (Button) findViewById(R.id.buttonA);
buttonB= (Button) findViewById(R.id.buttonB);
    buttonA .setOnClickListener(this);
    buttonB.setOnClickListener(this);


@Override
public void onClick(View v) {
    if (v == buttonA)

if(defaultDrawableA== null)
{
    defaultDrawableA=buttonA.getDrawable();
    buttonA.setBackgroundColor(Color.BLUE);
}
else
{
    buttonA.setBackgroundDrawable(defaultDrawableA);
    defaultDrawableA=null;
}
    else if (v == buttonB)

if(defaultDrawableB == null)
{
    defaultDrawableB=buttonB.getDrawable();
    buttonB.setBackgroundColor(Color.RED);
}
else
{
    buttonB.setBackgroundDrawable(defaultDrawableB);
    defaultDrawableB=null;
}

    return;
}

0

最简单的方法

只需更改您想要的颜色即可

button_design.xml

<?xml version="1.0" encoding="utf-8"?>

<item android:state_pressed="true">
    <shape android:shape="rectangle">
        <solid android:color="@color/colorPurple"></solid>
        <corners android:radius="100dp" />
    </shape>
</item>

<item>
    <shape android:shape="rectangle">
        <gradient android:endColor="@color/colorPurple" android:startColor="@color/colorBlue" />
        <corners android:radius="100dp" />
    </shape>
</item>

0

请尝试这个...

button_bg.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
    android:drawable="@color/button_pressed"/> <!-- pressed -->
<item android:drawable="@color/button_default"/> <!-- default -->

activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/button_bg"
    android:text="Click Me"
    android:textColor="#fff" />


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