SetBackgroundColor in android

enter image description here

In this simple game, I want to change the background color of the button that I click. But I get the following result: the appearance of the buttons becomes not very good (the form changes):

pressedButton.setBackgroundColor(Color.RED); 

Is there a better way to do this? 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; } } 
+6
source share
4 answers
 pressedButton.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY); 
+17
source

create a selector file of any name, for example button_selector.xml, in the folder with the picture

Edited by 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 the buttons in the background

 <Button android:background="@drawable/button_selector" /> 
+6
source

As @pratik said, save this button.xml in your drawing 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 this:

 public void onClick(View v) { pressedButton.setPressed(true); } 

so that the red color is stable.

+1
source

try the following:

you created this in ImageButton xml

create an xml file using a button image like this

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

add this xml file as background for IMageButton

 <ImageButton android:layout_height="50px" android:layout_width="50px" android:id="@+id/settings" android:background="@drawable/settings_button" //setting_button in the xml file android:text="Settings"/> 
0
source

Source: https://habr.com/ru/post/926374/


All Articles