当前位置: 首页 > 知识库问答 >
问题:

试图用SharedPreferences更改颜色,但没有以正确的方式进行

丁绪
2023-03-14

我试图从菜单中更改一些文本和mainactivity的颜色。我有两个菜单,白色和黑色,如果我点击白色将返回的颜色背景白色,按钮黑色,文字黑色。当我点击黑色会返回背景灰色,按钮白色,文本白色。我正在尝试用SharedPreferences保存,但它并不总是工作,它总是采用灰色。如果不使用SharedPreference并单击PopupMenu,它会改变颜色,但是使用SharedPreference,它不起作用,我写的是false。

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中的弹出菜单

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;
        }
      });
    }
  });

共有1个答案

邹曦之
2023-03-14

您需要更改以下内容:

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()”为false时,您将其设置为白色:

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

    }
 类似资料:
  • 我想要一个首选项标题的文本,以便在另一个首选项(a)更改时将其颜色更改为白色。当另一个首选项被更改时,我将从侦听器调用此方法: 现在有两种情况: 1) 如果我在方法中返回true,则的开关将正确更改(意味着在启用或禁用的新状态下向左或向右滑动),但受影响首选项的标题颜色不会更改。 2) 如果我在首选项更改中返回false,开关不会改变,但是标题文本的颜色会突然改变。 我怎样才能正确地做呢?

  • 我已经读过一些关于颜色的线程,但所有这些线程都必须通过style.xml进行设置。 现在我用这个来确定颜色。 是否可以不使用XML,例如使用代码来更改SwitchCompat/Checkbox的颜色?

  • 我正在尝试通过代码更改白色标记图像的颜色。我已经阅读了下面的代码应该改变颜色,但我的标记仍然是白色的。 我错过了什么吗?有没有其他方法可以更改位于我的res文件夹中的可绘制对象的颜色?

  • 然而,当我运行该应用程序时,我没有看到任何变化。更改背景本身: 将整个更改为-不是我想要的! 如何以编程方式更改、或的下划线颜色?我使用的是支持库的25.0.1版本。

  • 但是该文本字段上的上下文菜单将具有相同的颜色。 如何解决?

  • 本文向大家介绍iOS 更改图像的颜色,包括了iOS 更改图像的颜色的使用技巧和注意事项,需要的朋友参考一下 示例