首先,我有一个包含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
如果不想使用任何外部库,则可以创建一个enum
或interface
类,该类具有表示要保存的特定Typeface
并将其存储在SharedPreferences
中的变量。当用户重新打开应用程序时,只需检索该变量并使用switch
语句来确定要使用哪个Typeface
。
在SharedPreferences
中存储一个值,该值表示在CheckBox
被销毁之前选择了哪个Actvity
。然后在Activity
开始时检索该值并检查选择了哪个CheckBox
,然后选择相应的Typeface
。
我建议使用第二种或第三种方法,因为与其他方法相比,将Typeface
存储在SharedPreferences
中可能会带来一些性能缺陷。
关于android - Android-字体共享首选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49671212/