Android - 字体共享首选项
Android - Typeface Shared Preferences
首先,我有一个包含 2 个活动的应用程序。第一个是主要的。 2 日有 3 个复选框正在更改 main activity 中文本视图的字体(粗体、斜体和下划线)。我想要做的是在关闭并重新打开应用程序后,文本视图具有之前选择的字体。
有什么方法可以将字体存储在共享首选项中,或者可以通过其他方式完成吗?
谢谢
更新
这行得通(下面答案的第三种方法)
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,Bold 也不会出现。这真的很奇怪,因为每一个 If 都是以相同的方式制作的。此外,如果我更改顺序(例如 loadcheck2、loadcheck3、loadcheck1),则不会显示斜体。
可以使用GSON库来存储Object
class(Typeface
扩展Object
)在 SharedPrefereces
。有关此方法的更多信息:How Android SharedPreferences save/store object
如果您不想使用任何外部库,您可以使用 enum
或 interface
class 来表示特定的 [=11] =] 您想要保存该变量并将其存储在 SharedPreferences
中。当用户重新打开应用程序时,只需检索该变量并使用 switch
语句来确定要使用哪个 Typeface
。
在 SharedPreferences
中存储一个值,表示在销毁 Actvity
之前选择了哪个 CheckBox
。然后在 Activity
开始检索该值并检查选择了哪个 CheckBox
,然后选择相应的 Typeface
.
我建议使用 second 或 third 方法,因为与其他方法相比,将 Typeface
存储在 SharedPreferences
中可能会带来一些性能缺陷方法。
首先,我有一个包含 2 个活动的应用程序。第一个是主要的。 2 日有 3 个复选框正在更改 main activity 中文本视图的字体(粗体、斜体和下划线)。我想要做的是在关闭并重新打开应用程序后,文本视图具有之前选择的字体。 有什么方法可以将字体存储在共享首选项中,或者可以通过其他方式完成吗?
谢谢
更新
这行得通(下面答案的第三种方法)
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,Bold 也不会出现。这真的很奇怪,因为每一个 If 都是以相同的方式制作的。此外,如果我更改顺序(例如 loadcheck2、loadcheck3、loadcheck1),则不会显示斜体。
可以使用GSON库来存储
Object
class(Typeface
扩展Object
)在SharedPrefereces
。有关此方法的更多信息:How Android SharedPreferences save/store object如果您不想使用任何外部库,您可以使用
enum
或interface
class 来表示特定的 [=11] =] 您想要保存该变量并将其存储在SharedPreferences
中。当用户重新打开应用程序时,只需检索该变量并使用switch
语句来确定要使用哪个Typeface
。在
SharedPreferences
中存储一个值,表示在销毁Actvity
之前选择了哪个CheckBox
。然后在Activity
开始检索该值并检查选择了哪个CheckBox
,然后选择相应的Typeface
.
我建议使用 second 或 third 方法,因为与其他方法相比,将
Typeface
存储在 SharedPreferences
中可能会带来一些性能缺陷方法。