我想要两种状态的按钮:
我在按钮背景中设置了正常图像,我正在尝试从onClick
方法更改图像(按下),但它没有改变。
final Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
private int flag;
@Override
public void onClick(View v) {
if(flag==1)
{
button1.setBackgroundResource(R.drawable.on);
flag=0;
}
if(flag==0)
{
button1.setBackgroundResource(R.drawable.off);
flag=1;
}
}
});
答案 0 :(得分:4)
if(flag==1)
{
button1.setBackgroundResource(R.drawable.on);
flag=0;
}
else if(flag==0)
{
button1.setBackgroundResource(R.drawable.off);
flag=1;
}
您需要else if
,否则当flag = 1时,您将背景设置为R.drawable.on
和flag=0;
。下一条指令为if (flag == 0)
,这是真的,您再次放button1.setBackgroundResource(R.drawable.off);
答案 1 :(得分:4)
还有另一种选择:您可以将android.widget.ToggleButton
与选择器一起使用:
代码:
ToggleButton toggleButton = (ToggleButton) view.findViewById(R.id.toggleButton);
toggleButton.setChecked(true/false);
使用代码段的主要布局:
....
<ToggleButton android:id="@+id/toggleButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn=""
android:textOff=""
android:background="@drawable/toggle_states"/>
....
RES /抽拉/ toggle_states.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/icon_alarm_on"></item>
<item android:state_checked="false" android:drawable="@drawable/icon_alarm_off"></item>
</selector>
Android将自动设置 drawable / icon_alarm_on 或 drawable / icon_alarm_off ,具体取决于使用ToggleButton.setChecked()
方法设置的状态
答案 2 :(得分:3)
您的要求适合ToggleButton
,而不仅仅是Button
。您可以将按钮更改为切换按钮和setOnCheckedChangedListener()
以处理打开和关闭状态。
使用以下代码
<ToggleButton
android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/check" //check.xml
android:textOn=""
android:textOff=""/>
并准备一个可绘制的xml并将其存储在drawable文件夹中。将xml文件命名为check.xml
您的check.xml
代码应如下所示。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected, use grey -->
<item android:drawable="@drawable/your_switched_on_image"
android:state_checked="true" />
<!-- When not selected, use white-->
<item android:drawable="@drawableyour_switched_off_image"
android:state_checked="false"/>
</selector>
答案 3 :(得分:2)
您可以尝试使用其他部分
@Override
public void onClick(View v) {
if(flag==1)
{
button1.setBackgroundResource(R.drawable.on);
flag=0;
}
else
{
button1.setBackgroundResource(R.drawable.off);
flag=1;
}
}
});
答案 4 :(得分:2)
以下内容更符合您的需求,但还有其他一些注意事项。
您是否需要记住应用重启/配置更改的状态。如果是这样,您需要使用共享首选项来存储状态并检索它。
我认为,标志变量需要在侦听器外声明,否则每次发生单击事件时都会重置它,并且您将丢失状态。玩弄它。应该让你更近一点:
final Button button1 = (Button) findViewById(R.id.button1);
private int flag = 0;
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(flag==1)
{
button1.setBackgroundResource(R.drawable.on);
flag=0;
}else if(flag==0)
{
button1.setBackgroundResource(R.drawable.off);
flag=1;
}
}
});
答案 5 :(得分:2)
由于您已在函数调用中传递View
,因此您可以直接使用view
而不是调用button1
。这种方式更准确。我在我的应用程序中使用它:
@Override
public void onClick(View v) {
if(flag==1)
{
v.setBackgroundResource(R.drawable.on);
flag=0;
}
else
{
v.setBackgroundResource(R.drawable.off);
flag=1;
}
}