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

谢谢

更新

这有效(下面的答案的第三种方法)

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


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

最佳答案

您可以使用GSON库在Object中存储Typeface类(Object扩展SharedPrefereces)。有关此方法的更多信息:How Android SharedPreferences save/store object
如果不想使用任何外部库,则可以创建一个enuminterface类,该类具有表示要保存的特定Typeface并将其存储在SharedPreferences中的变量。当用户重新打开应用程序时,只需检索该变量并使用switch语句来确定要使用哪个Typeface
SharedPreferences中存储一个值,该值表示在CheckBox被销毁之前选择了哪个Actvity。然后在Activity开始时检索该值并检查选择了哪个CheckBox,然后选择相应的Typeface



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

关于android - Android-字体共享首选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49671212/

10-09 04:06