以编程方式更改按钮背景可绘制 onClick
Programmatically change button background drawable onClick
我正在尝试切换我的按钮的背景可绘制对象,这样当用户单击按钮时,它的背景就会改变,当用户再次单击按钮时,它的背景 returns 变为默认。这是我的代码:
public void Favorites(View V) {
Button star = (Button) findViewById(R.id.buttonStar);
if(star.getBackground().equals(R.drawable.btn_star_off)) {
star.setBackgroundResource(R.drawable.btn_star_on);
} else {
star.setBackgroundResource(R.drawable.btn_star_off);
}
}
我很确定这不是您使用带有 if
语句的可绘制对象的方式。有人可以建议一种方法吗?
不要那样做。请改用选择器资源 http://www.compiletimeerror.com/2014/03/android-button-selector-tutorial-with.html
您可以在 drawable 文件夹中创建一个 xml。
这个 xml(您选择名称...让我们称之为 "bg_button_star.xml")可能看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/btn_star_on" />
<item android:drawable="@drawable/btn_star_off" />
然后您必须将此可绘制文件分配给布局文件中的按钮背景属性。
android:background="@drawable/bg_button_star"
如果您想以编程方式执行此操作,则只需执行以下操作:
button.setBackgroundResource(R.drawable.bg_button_star);
当用户第一次点击按钮时,您将 Selected 状态设置为 'true'。背景随之改变。 (反之亦然 'false' 选定状态)。
在这种情况下,您应该使用 ToggleButton 而不是 Button。
有一个 API 指南:
http://developer.android.com/guide/topics/ui/controls/togglebutton.html
您可以在 onClick() 中执行以下操作:
if(star.getTag()==R.drawable.btn_star_on){
star.setTag(R.drawable.btn_star_off);
star.setBackgroundResource(R.drawable.btn_star_off);
} else {
star.setTag(R.drawable.btn_star_on);
star.setBackgroundResource(R.drawable.btn_star_on);
}
显然,根据您的信息,最好在 if 和 else 语句之前添加标签。我不知道您的其余代码以及您如何检查是否必须使用可绘制资源 btn_star_off
或 btn_star_on
初始化此按钮
你可以试试这个。
public void Favorites(View V) {
Button star = (Button) findViewById(R.id.buttonStar);
if(star.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.btn_star_off).getConstantState()))
{
star.setBackground(R.drawable.btn_star_on);
} else {
star.setBackground(R.drawable.btn_star_off);
}
}
但请确保您正在调用开始按钮的 onClick() 方法。
否则你必须这样做。
Button star = (Button) findViewById(R.id.buttonStar);
star.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.btn_star_off).getConstantState()))
{
v.setBackground(R.drawable.btn_star_on);
} else {
v.setBackground(R.drawable.btn_star_off);
}
}
});
private boolean isButtonClicked = false; // You should add a boolean flag to record the button on/off state
protected void onCreate(Bundle savedInstanceState) {
......
Button star = (Button) findViewById(R.id.buttonStar);
star.setOnClickListener(new OnClickListener() { // Then you should add add click listener for your button.
@Override
public void onClick(View v) {
if (v.getId() == R.id.buttonStar) {
isButtonClicked = !isButtonClicked; // toggle the boolean flag
v.setBackgroundResource(isButtonClicked ? R.drawable.btn_star_on : R.drawable.btn_star_off);
}
}
});
}
我正在尝试切换我的按钮的背景可绘制对象,这样当用户单击按钮时,它的背景就会改变,当用户再次单击按钮时,它的背景 returns 变为默认。这是我的代码:
public void Favorites(View V) {
Button star = (Button) findViewById(R.id.buttonStar);
if(star.getBackground().equals(R.drawable.btn_star_off)) {
star.setBackgroundResource(R.drawable.btn_star_on);
} else {
star.setBackgroundResource(R.drawable.btn_star_off);
}
}
我很确定这不是您使用带有 if
语句的可绘制对象的方式。有人可以建议一种方法吗?
不要那样做。请改用选择器资源 http://www.compiletimeerror.com/2014/03/android-button-selector-tutorial-with.html
您可以在 drawable 文件夹中创建一个 xml。 这个 xml(您选择名称...让我们称之为 "bg_button_star.xml")可能看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/btn_star_on" />
<item android:drawable="@drawable/btn_star_off" />
然后您必须将此可绘制文件分配给布局文件中的按钮背景属性。
android:background="@drawable/bg_button_star"
如果您想以编程方式执行此操作,则只需执行以下操作:
button.setBackgroundResource(R.drawable.bg_button_star);
当用户第一次点击按钮时,您将 Selected 状态设置为 'true'。背景随之改变。 (反之亦然 'false' 选定状态)。
在这种情况下,您应该使用 ToggleButton 而不是 Button。
有一个 API 指南: http://developer.android.com/guide/topics/ui/controls/togglebutton.html
您可以在 onClick() 中执行以下操作:
if(star.getTag()==R.drawable.btn_star_on){
star.setTag(R.drawable.btn_star_off);
star.setBackgroundResource(R.drawable.btn_star_off);
} else {
star.setTag(R.drawable.btn_star_on);
star.setBackgroundResource(R.drawable.btn_star_on);
}
显然,根据您的信息,最好在 if 和 else 语句之前添加标签。我不知道您的其余代码以及您如何检查是否必须使用可绘制资源 btn_star_off
或 btn_star_on
你可以试试这个。
public void Favorites(View V) {
Button star = (Button) findViewById(R.id.buttonStar);
if(star.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.btn_star_off).getConstantState()))
{
star.setBackground(R.drawable.btn_star_on);
} else {
star.setBackground(R.drawable.btn_star_off);
}
}
但请确保您正在调用开始按钮的 onClick() 方法。
否则你必须这样做。
Button star = (Button) findViewById(R.id.buttonStar);
star.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.btn_star_off).getConstantState()))
{
v.setBackground(R.drawable.btn_star_on);
} else {
v.setBackground(R.drawable.btn_star_off);
}
}
});
private boolean isButtonClicked = false; // You should add a boolean flag to record the button on/off state
protected void onCreate(Bundle savedInstanceState) {
......
Button star = (Button) findViewById(R.id.buttonStar);
star.setOnClickListener(new OnClickListener() { // Then you should add add click listener for your button.
@Override
public void onClick(View v) {
if (v.getId() == R.id.buttonStar) {
isButtonClicked = !isButtonClicked; // toggle the boolean flag
v.setBackgroundResource(isButtonClicked ? R.drawable.btn_star_on : R.drawable.btn_star_off);
}
}
});
}