【问题标题】:how to keep button color如何保持按钮颜色
【发布时间】:2014-11-17 07:06:52
【问题描述】:

我一直在尝试做的是在使用共享首选项按下按钮时保存按钮的状态。当按钮默认时,它是白色的,但当按下时,它是黑色的。即使当我按下返回按钮或从其他活动或应用程序返回时,我也希望该按钮保持黑色。几天来我一直在为这个问题苦苦挣扎,这让我觉得我编程不好。有人可以帮我吗?这是我的代码。

fb1 = (Button) findViewById(R.id.button1);
fb1.setBackgroundResource(R.drawable.not_pressed);
    fb1.setOnClickListener(new OnClickListener() {
        boolean isPressed = true;
        //boolean isPressed1 = true;

        @Override
        public void onClick(View v) {
            //isPressed = sharedPrefs.getBoolean("locked", false);
            fb1.setEnabled(sharedPrefs.getBoolean("locked", true));
            System.out.println("BOOL" + isPressed);
            if (!isPressed) { 
                fb1.setBackgroundResource(R.drawable.not_pressed);
                fr1 = 0;
                //fb1.setEnabled(false);
                //sharedPrefs.edit().putBoolean("locked", fb1.isEnabled()).commit();
            } else {
                fb1.setBackgroundResource(R.drawable.pressed);
                fr1 = 128;
                //fb1.setEnabled(true);
                //savePreferences("locked", fb1.isEnabled());
                sharedPrefs.edit().putBoolean("locked", fb1.isEnabled()).commit();
            }
            isPressed = !isPressed;
        }
    });

【问题讨论】:

  • 你为什么注释掉 isPressed = sharedPrefs.getBoolean() 调用?如果您不更改其默认值,isPressed 将始终为真。此外,当您的按钮处于“按下”状态时,您只会将状态保存到共享首选项。

标签: android button colors


【解决方案1】:

首先创建一个常量类,并在其中声明一个静态变量:

public class Constants(){
public static boolean isPressed = false;
}

现在,在您的 Activity 类中使​​用这个静态变量来在您的应用的整个生命周期中存储按钮按下事件。

fb1 = (Button) findViewById(R.id.button1); 
fb1.setBackgroundResource(R.drawable.not_pressed); 
fb1.setOnClickListener(new OnClickListener() { 
    if (!Constants.isPressed) {         //if button is not pressed it is set to white color(initially false)
            fb1.setBackgroundResource(R.drawable.not_pressed);
            fr1 = 0; 
            //fb1.setEnabled(false); 
            //sharedPrefs.edit().putBoolean("locked", fb1.isEnabled()).commit(); 
        } else {                        //if pressed to black
            fb1.setBackgroundResource(R.drawable.pressed);
            fr1 = 128; 
            //fb1.setEnabled(true); 
            //savePreferences("locked", fb1.isEnabled()); 
            sharedPrefs.edit().putBoolean("locked", fb1.isEnabled()).commit(); 
        }
    @Override 
    public void onClick(View v) {
        //isPressed = sharedPrefs.getBoolean("locked", false); 
        fb1.setEnabled(sharedPrefs.getBoolean("locked", true)); 
        System.out.println("BOOL" + isPressed);
        Constants.isPressed = true;         //Sets is pressed to true throughout lifecycle of your app.
        //Execute other onPressed logic here
    } 
});

这可能会解决您的问题。

【讨论】:

    【解决方案2】:

    您可以使用选择器来选择要显示的颜色 - 这是使用选择器的示例:

    <?xml version="1.0" encoding="utf-8" ?>
    

    <item
        android:state_enabled="false"
        android:drawable="@drawable/remove_contacts_button_disabled"
        />
    <item
        android:state_enabled="true"
        android:state_pressed="true"
        android:drawable="@drawable/remove_contacts_button_highlighted"
        />
    <item
        android:drawable="@drawable/remove_contacts_button_regular"
        />
    

    在 onClikLisitner 中,在共享首选项中保存单击时想要的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 2013-10-24
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 2015-05-15
      • 2021-11-19
      相关资源
      最近更新 更多