【问题标题】:Trying to change colors with SharedPreferences but it is not getting in the right way尝试使用 SharedPreferences 更改颜色,但方法不正确
【发布时间】:2018-12-27 10:29:32
【问题描述】:

我正在尝试从菜单中更改某些文本和MainActivity 的颜色。 我有两个菜单,白色和黑色,如果我点击白色将返回背景白色,按钮黑色,文本黑色。当我单击黑色时,将返回背景灰色、按钮白色、文本、白色的颜色。 我正在尝试使用SharedPreferences 保存它,但它并不总是工作它采用灰色。 如果我在没有SharedPreferences 的情况下执行此操作并单击PopUpMenu 它会更改颜色,但使用SharedPreferences 它不起作用我写的是假的。

这是我在MainActivity.class 中的代码。

private boolean switchOnOff;
public static final String Change_Color = "Change_Color";


switchOnOff = getChangeColor();
    if (switchOnOff) {
        setColorGreyImageButton();
    } else {
        setColorWhiteImageButton();

    }

public void setColorGreyImageButton() {
    settings.setColorFilter(Color.parseColor("#757575"));
    voiceSearch.setColorFilter(Color.parseColor("#757575"));
    share.setColorFilter(Color.parseColor("#757575"));
    search.setColorFilter(Color.parseColor("#757575"));
    mainView.setBackgroundColor(Color.parseColor("#FFFFFF"));

}


public void setColorWhiteImageButton() {
    settings.setColorFilter(Color.parseColor("#FFFFFF"));
    voiceSearch.setColorFilter(Color.parseColor("#FFFFFF"));
    share.setColorFilter(Color.parseColor("#FFFFFF"));
    search.setColorFilter(Color.parseColor("#FFFFFF"));
    mainView.setBackgroundColor(Color.parseColor("#ff212121"));
}

public void saveColor(boolean changeColor) {
    SharedPreferences sharedPreferences = getSharedPreferences("Color", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(getPackageName() + ".change_color", changeColor);
    editor.apply();

}


  private boolean getChangeColor() {
        SharedPreferences sharedPreferences = getSharedPreferences("Color", MODE_PRIVATE);
        return sharedPreferences.getBoolean(getPackageName() + ".change_color", false);
    }

这是MainActivity.class中的PopUpMenu

mPopupMenu = new PopupMenu(this, settings);
        MenuInflater menuInflater = mPopupMenu.getMenuInflater();
        menuInflater.inflate(R.menu.main_settings, mPopupMenu.getMenu());
        settings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPopupMenu.show();
                mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {

                        int id = item.getItemId();
                        if(id == R.id.menu_back_white) {
                            saveColor(true);
                        } else if (id == R.id.menu_back_black) {
                            saveColor(false);
                        }
       return false;
        }
      });
    }
  });

【问题讨论】:

  • 您是否检查过布尔值是否实际保存在共享首选项中?以及返回什么值? Apply 是异步的,因此如果您想快速更改配色方案,可能没有足够的时间来保存标志。
  • 不,我没有检查,因为我正在尝试记录但我无法为布尔值创建日志
  • @Spritzig- 你 can 创建一个日志,将注销布尔值。
  • 当我退出应用程序并再次打开时它正在保存更改在那里但是当我点击时它不会改变主题你知道如何快速更新吗?
  • @Spritzig 当然你不想重新加载活动。事实是我对drawables没有太多经验,所以我无法帮助你。我找到了这些链接:stackoverflow.com/questions/44984488/…stackoverflow.com/questions/18954042/setcolorfilter-not-working。也许这些可以帮助你。

标签: android sharedpreferences


【解决方案1】:

你需要改变这个:

if(id == R.id.menu_back_white) {
   saveColor(false); //I changed true to false 
} else if (id == R.id.menu_back_black) {
   saveColor(true); //I changed false to true
}

因为当“getChangeColor()”为假时,你将它设置为白色:

switchOnOff = getChangeColor();
    if (switchOnOff) {
        setColorGreyImageButton();
    } else {
        setColorWhiteImageButton();

    }

【讨论】:

  • 我已更改此设置,但它不会自动更新视图我需要退出应用程序,然后当我打开更改颜色时,您知道如何使其快速更改视图跨度>
  • 你在 OnCreate 上调用它吗?
  • 在 setContentView 之前还是之后?
  • setContentView 之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
相关资源
最近更新 更多