【问题标题】:Android - Typeface Shared PreferencesAndroid - 字体共享首选项
【发布时间】:2018-04-05 11:26:47
【问题描述】:

首先,我有一个包含 2 个活动的应用。第一个是主要的。第二个有 3 个复选框正在更改主要活动中 textview 的字体(粗体、斜体和下划线)。我想要做的是在关闭并重新打开应用程序后,文本视图具有先前选择的字体。 有没有办法将字体存储在共享首选项中,或者可以通过其他方式完成?

谢谢

更新

这行得通(下面答案的第三种方法)

    boolean loadCheck1 = preferences.getBoolean("checked1", false);
    if (loadCheck1) {
            tx.setTypeface(tx.getTypeface(), Typeface.BOLD);
    } else {
        tx.setTypeface(null, Typeface.NORMAL);
    }

    boolean loadCheck2 = preferences.getBoolean("checked2", false);
    if (loadCheck2) {
        tx.setTypeface(tx.getTypeface(), Typeface.ITALIC);
    } else {
        tx.setTypeface(null, Typeface.NORMAL);
    }

    boolean loadCheck3 = preferences.getBoolean("checked3", false);
    if (loadCheck3){
        tx.setPaintFlags(tx.getPaintFlags()| Paint.UNDERLINE_TEXT_FLAG);
    } else {
    tx.setPaintFlags(tx.getPaintFlags() & (~Paint.UNDERLINE_TEXT_FLAG));
    }

但是字体粗体存在问题。即使 checkbox1 被选中 Bold 也不会出现。这真的很奇怪,因为每个 If 都是以相同的方式制作的。此外,如果我要更改顺序(例如 loadcheck2、loadcheck3、loadcheck1),则不会出现斜体。

【问题讨论】:

    标签: android textview android-sharedpreferences


    【解决方案1】:
    • 您可以使用 GSON 库将Object 类(Typeface 扩展Object)存储在SharedPrefereces 中。有关此方法的更多信息:How Android SharedPreferences save/store object

    • 如果您不想使用任何外部库,您可以创建一个 enuminterface 类,其中的变量代表您要保存的特定 Typeface,并将该变量存储在 @987654329 @。当用户重新打开应用程序时,只需检索该变量并使用 switch 语句来确定要使用哪个 Typeface

    • SharedPreferences 中存储一个值,该值表示在销毁Actvity 之前选择了哪个CheckBox。然后在Activity 开始时检索该值并检查哪个CheckBox 被选中,然后选择相应的Typeface


    我建议使用 secondthird 方法,因为与其他方法相比,将 Typeface 存储在 SharedPreferences 中可能会带来一些性能缺陷。

    【讨论】:

    • 太棒了!非常感谢!但我还有另一个问题。请查看更新后的问题。
    • 我很高兴它成功了。我建议您添加一些断点并调试您的代码。
    • 顺便说一句,您的目标是在彼此上使用几种字体,例如:粗体 + 斜体 / 粗体 + 下划线 / 粗体 + 斜体 + 下划线?还是只有一个?因为目前如果前两个条件为真,那么第二个 if 将覆盖第一个 if
    • 取决于选中的复选框(如果粗体和斜体被选中,那么文本应该是粗体和斜体等)。但仍然不知道为什么只有两个在工作。以前它们都在工作,代码完全相同。
    • 那么正如我上面提到的,如果粗体条件和斜体条件都是true,那么第二个条件将始终覆盖第一个。只需在第二个 if: tx.setTypeface(null, Typeface.ITALIC | Typeface.BOLD); 使用它
    猜你喜欢
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2012-09-20
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多