android中的setBackgroundColor
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12615720/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
setBackgroundColor in android
提问by Hamzeh Soboh
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;
}
}
回答by Tamir Scherzer
pressedButton.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
回答by Pratik
create selector file any name like button_selector.xml in drawable folder
在 drawable 文件夹中创建任何名称的选择器文件,例如 button_selector.xml
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"
/>
回答by Ram kiran
As @pratik said save this button.xmlin drawable folder
正如@pratik 所说,将此button.xml保存在 drawable 文件夹中
button.xml
按钮.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
使红色稳定
回答by SubbaReddy PolamReddy
try this :
尝试这个 :
you have create like this in the ImageButton xml
你在 ImageButton xml 中创建了这样的
create xml file using the button image like this
使用这样的按钮图像创建 xml 文件
<?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 that xml file as background for IMageButton
将该 xml 文件添加为 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"/>