【问题标题】:Shared Preferences - Color, Tint and Visibility共享偏好 - 颜色、色调和可见性
【发布时间】:2019-12-23 15:00:11
【问题描述】:

我的布局可以更改背景颜色、色调列表和文本颜色以实现暗/亮模式功能。

只有两种设置(深色/浅色),主题中使用的颜色在我的代码顶部引用,如下所示:

    int orangeTheme = Color.rgb(253,135,0);
    int blueTheme = Color.rgb(0,0,254);
    int whiteTheme = Color.rgb(213,214,214);
    int blackTheme = Color.rgb(0,0,0);

这样设置:(黑暗模式)

gridLayout.setBackgroundColor(blackTheme);

buttonA.setBackgroundTintList(ColorStateList.valueOf(blueTheme));
buttonA.setTextColor(blackTheme);

buttonB.setBackgroundTintList(ColorStateList.valueOf(orangeTheme));
buttonB.setTextColor(blackTheme);

seekBar.setProgressTintList(ColorStateList.valueOf(blueTheme));
seekBar.setThumbTintList(ColorStateList.valueOf(blueTheme));

并像这样恢复:(灯光模式)

gridLayout.setBackgroundColor(orangeTheme);

buttonA.setBackgroundTintList(ColorStateList.valueOf(blackTheme));
buttonA.setTextColor(ColorStateList.valueOf(whiteTheme));

buttonB.setBackgroundTintList(ColorStateList.valueOf(blueTheme));
buttonB.setTextColor(ColorStateList.valueOf(orangeTheme));

seekBar.setProgressTintList(ColorStateList.valueOf(blackTheme));
seekBar.setThumbTintList(ColorStateList.valueOf(blackTheme));

使用共享首选项,如何保存和加载这些值?

public void saveData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.apply();
        Toast.makeText(FavouriteActivity.this, "Data saved", Toast.LENGTH_SHORT).show();
    }

public void loadData() {
        SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS,MODE_PRIVATE);

        Toast.makeText(FavouriteActivity.this, "Data loaded", Toast.LENGTH_SHORT).show();
    }

public void updateViews() {

        Toast.makeText(FavouriteActivity.this, "Views updated" , Toast.LENGTH_SHORT).show();
    }

我对 Android 和 Java 的经验非常少,我见过的所有保存状态教程都处理文本视图内容或开关的位置,仅此而已。这就是我问的原因 - 我仍然不确定如何保存或引用大多数内容,但目前我主要关注以下内容:

  • 约束布局背景颜色
  • 网格布局背景颜色
  • 按钮背景颜色
  • 按钮背景色调
  • 按钮文字颜色
  • 按钮可见性

如何在共享首选项保存/加载功能中引用和检索这些方面?

有没有更好的方法来保存和加载这些方面?

感谢所有帮助。

【问题讨论】:

  • 我回答了你的两个问题 OP,看看他们是否能帮助你:)
  • 是的,对不起,我现在只是走一条稍微不同的路线,但肯定会在未来实现这一点,谢谢 :)

标签: android layout save load sharedpreferences


【解决方案1】:

我的回答是:您不应该手动执行此操作。相反,创建两个资源文件(这些组件的样式文件),然后使用AppCompatDelegate.setDefaultNightMode

看看这个:

在 24.1.0 版本中添加了 setDefaultNightMode

void setDefaultNightMode(整数模式)

设置默认夜间模式。这用于所有 活动/对话,但可以通过本地覆盖 setLocalNightMode(int).

此方法仅在以下情况下生效 applyDayNight() 有效。默认为 MODE_NIGHT_NO。

这仅对之后创建的组件生效 称呼。任何已经打开的组件都不会更新。

取下列值之一:

MODE_NIGHT_NO。始终使用白天(浅色)主题。

MODE_NIGHT_YES。始终使用夜间(深色)主题。

MODE_NIGHT_FOLLOW_SYSTEM(默认)。此设置遵循系统的 设置,在 Android Q 及更高版本上是系统设置(更多关于 下面这个)。

(您可以通过检查共享首选项中保存的值来应用其中之一,如您的示例所示)

更多信息:

https://developer.android.com/reference/android/support/v7/app/AppCompatDelegate.html#setDefaultNightMode(int)

https://medium.com/androiddevelopers/appcompat-v23-2-daynight-d10f90c83e94

Day/Night theme for android app

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多