[英]Changing background of button depending on current background
我试图在单击按钮时更改其背景,但也能够在再次单击该按钮时将其更改回。 我想做的是获取按钮的当前背景,如果是(xxxxx),则将其更改为(yyyyy)。 我似乎找不到如何获取按钮的当前背景并将其与我的可绘制资源之一进行比较的方法。
任何帮助将非常感激。
我正在尝试做的一些伪代码:
if (button1.getBackground() == R.drawable.someDrawable) {
button1.setBackgroundResource(R.drawable.someOtherDrawable);
}
我认为这是正确的方法: 链接
我的简单解决方案是将两个可绘制对象用作背景。 一个用于non_pressed_selector和Pressed_selector,只要跟踪是否按下按钮就可以了。
private boolean isPressed = false;
public void onClick() {
if (isPressed) {
// set not_pressed_selector
} else {
// set pressed_selector
}
isPressed != isPressed;
}
我所做的是:
在初始状态下声明按钮:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/StateA"/>
</selector>
然后,我通过代码管理带有标签的按钮的实际状态的事件:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.drawables_buttons); //This is the layout where it's the button
threeStateButton = (Button)findViewById(R.id.three_States_Button); //This is the button
threeStateButton.setOnTouchListener(new CustomTouchListener());
threeStateButton.setTag("StateA"); //Set the control tag
}
private class CustomTouchListener implements View.OnTouchListener
{
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
switch (motionEvent.getAction())
{
case MotionEvent.ACTION_UP: //When you lift your finger
if (threeStateButton.getTag().equals("StateA"))
{
threeStateButton.setBackgroundResource(R.drawable.StateB);
Toast.makeText(view.getContext(), "This gonna change my state from StateA to StateB",Toast.LENGTH_SHORT).show();
threeStateButton.setTag("StateB");
}
else //If when you lift your finger it was already on stateB
{
threeStateButton.setBackgroundResource(R.drawable.red_button);
Toast.makeText(view.getContext(), "This gonna change my state from StateB to StateA",Toast.LENGTH_SHORT).show();
threeStateButton.setTag("StateA");
}
break;
//In case you want that you button shows a different state when your finger is pressing it.
case MotionEvent.ACTION_DOWN:
threeStateButton.setBackgroundResource(R.drawable.StateButtonPressed);
break;
}
return false;
}
}
我不知道这是否是最好的方法,但它确实有效,是的,我想知道这是最佳方法。
似乎您需要一个ToggleButton
而不是简单的Button
。 您可以使用isChecked()
方法确定OnClickListener
按钮的状态,并在OnClickListener
设置背景。 或者您可以在xml中定义选择器,如pedr0所述。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.