我正在尝试在点击按钮时更改按钮的背景,但也可以在再次单击按钮时将其更改回来。我要做的是获取当前背景的按钮,如果是(xxxxx),则将其更改为(yyyyy)。我似乎无法找到如何获取按钮的当前背景并将其与我的一个可绘制资源进行比较 任何帮助将不胜感激。
我正在尝试做的一些伪代码:
if (button1.getBackground() == R.drawable.someDrawable) {
button1.setBackgroundResource(R.drawable.someOtherDrawable);
}
答案 0 :(得分:3)
我认为这是正确的方法:link
答案 1 :(得分:1)
我简单的解决方案是将两个drawables用于背景。一个用于non_pressed_selector和pressed_selector,只需按下按钮即可跟踪。
private boolean isPressed = false;
public void onClick() {
if (isPressed) {
// set not_pressed_selector
} else {
// set pressed_selector
}
isPressed != isPressed;
}
答案 2 :(得分:0)
您似乎需要ToggleButton
而非简单Button
。您可以使用isChecked()
方法在OnClickListener
中确定按钮的状态,并在那里设置背景。或者你可以在xml中定义选择器,如pedr0所说。
答案 3 :(得分:0)
我做的是:
声明按钮的初始状态:
<?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;
}
}
我不知道这是否是最好的方法,但它有效,是的,我想知道这是最佳方式。