setBackgroundColor in android
67,074
Solution 1
pressedButton.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
Solution 2
create selector file any name like button_selector.xml in drawable folder
Edited with Gradient
<?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"/>
<gradient android:startColor="#ad1c1c" android:endColor="#cc3737" android:angle="90"/>
<padding android:left="10.0dip" android:top="10.0dip"
android:right="10.0dip" android:bottom="10.0dip"/>
<stroke android:width="1.0dip" android:color="#7d0000"/>
</shape>
</item>
<item android:state_pressed="false">
<shape android:shape="rectangle">
<corners android:radius="5dp"/>
<gradient android:startColor="#cfcfcf" android:endColor="#ebebeb" android:angle="90"/>
<padding android:left="10.0dip" android:top="10.0dip"
android:right="10.0dip" android:bottom="10.0dip"/>
<stroke android:width="1.0dip" android:color="#8f8f8f"/>
</shape>
</item>
</selector>
then set in button background
<Button
android:background="@drawable/button_selector"
/>
Solution 3
As @pratik said save this button.xml in drawable folder
button.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"/>
<solid android:color="#f00"/>
<padding android:left="10.0dip" android:top="10.0dip"
android:right="10.0dip" android:bottom="10.0dip"/>
<stroke android:width="1.0dip" android:color="#222"/>
</shape>
</item>
<item android:state_pressed="false">
<shape android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="#f1f1f1"/>
<padding android:left="10.0dip" android:top="10.0dip"
android:right="10.0dip" android:bottom="10.0dip"/>
<stroke android:width="1.0dip" android:color="#222"/>
</shape>
</item>
</selector>
Apply this button as background
<Button
android:background="@drawable/button"/>
and in your class file do like this
public void onClick(View v) {
pressedButton.setPressed(true);
}
so that the red color will be stable
Author by
Hamzeh Soboh
Mobile Application Development Engineer at Rubikomm Telecom Solutions
Updated on May 07, 2020Comments
-
Hamzeh Soboh about 4 years
In this simple game I want to change the background color of the button that I press. But I get the following result, the buttons appearance becomes not good (the shape becomes different):
pressedButton.setBackgroundColor(Color.RED);
Is there a nicer way to do that? Thanks.
[Edit: my full code]
package com.example.xo_game; import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { Button[] btns; char[][] gameState = new char[3][3]; char turn = 'X'; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button[] btns = new Button[9]; btns[0] = (Button) findViewById(R.id.btn1); btns[1] = (Button) findViewById(R.id.btn2); btns[2] = (Button) findViewById(R.id.btn3); btns[3] = (Button) findViewById(R.id.btn4); btns[4] = (Button) findViewById(R.id.btn5); btns[5] = (Button) findViewById(R.id.btn6); btns[6] = (Button) findViewById(R.id.btn7); btns[7] = (Button) findViewById(R.id.btn8); btns[8] = (Button) findViewById(R.id.btn9); for (int i = 0; i < 9; i++) { btns[i].setTag(i); btns[i].setOnClickListener(clickListener); gameState[i / 3][i % 3] = 'E'; } } View.OnClickListener clickListener = new View.OnClickListener() { public void onClick(View v) { Button pressedButton = (Button) v; int indexOfPressedButton = Integer.parseInt(pressedButton.getTag() .toString()); int row = indexOfPressedButton / 3; int col = indexOfPressedButton % 3; if (gameState[row][col] != 'E') return; gameState[row][col] = turn; String turnAsString = String.valueOf(turn); pressedButton.setText(turnAsString); if (turn == 'X') { pressedButton.setBackgroundColor(Color.RED); turn = 'O'; } else { pressedButton.setBackgroundColor(Color.GREEN); turn = 'X'; } } }; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }