Для начала у меня есть приложение с двумя видами деятельности. 1-й - основной. На втором есть 3 флажка, которые меняют шрифт текстового представления в основном действии (полужирный, курсив и подчеркивание). Что я хочу сделать, так это после закрытия и повторного открытия приложения в текстовом представлении будет выбран ранее выбранный шрифт. Есть ли способ сохранить шрифт в общих настройках или это можно сделать другим способом?
Спасибо
ОБНОВИТЬ
Это работает (третий подход снизу, ответ)
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));
}
Но есть проблема с полужирным шрифтом. Даже если установлен флажок 1, жирный шрифт не отображается. Это действительно странно, ведь все If сделаны одинаково. Кроме того, если я изменю порядок (например, loadcheck2, loadcheck3, loadcheck1), курсив не будет отображаться.
Вы можете использовать библиотеку GSON для хранения класса Object (Typeface расширяет Object) в SharedPrefereces. Подробнее об этом подходе: Как Android SharedPreferences сохраняет / сохраняет объект
Если вы не хотите использовать какие-либо внешние библиотеки, вы можете создать класс enum или interface с переменными, которые будут представлять конкретный Typeface, который вы хотите сохранить, и сохранить эту переменную в SharedPreferences. Когда пользователь повторно открывает приложение, просто извлеките эту переменную и используйте инструкцию switch, чтобы определить, какой Typeface использовать.
Сохраните значение в SharedPreferences, которое представляет, какой CheckBox выбран перед уничтожением Actvity. Затем при запуске Activity найдите это значение и проверьте, какой из CheckBoxбыл выбран, затем выберите соответствующий Typeface.
Typeface in SharedPreferences might bring some performance drawbacks compared to other approaches.
Я рад, что это сработало. Я бы посоветовал вам добавить несколько точек останова и отладить код.
Кстати, ваша цель - использовать несколько шрифтов друг на друге, например: Полужирный + Курсив / Полужирный + Подчеркнутый / Полужирный + Курсив + Подчеркнутый? Или всего один? Потому что на данный момент, если выполняются первые 2 условия, второй if будет иметь приоритет над первым if.
Зависит от установленного флажка (если выбран полужирный или курсив, текст должен быть полужирным и курсивом и т. д.). Но до сих пор не понимаю, почему только два из них работают. Раньше все они работали, и код был точно такой же.
Затем, как я упоминал выше, если условное обозначение жирным шрифтом и условное обозначение курсивом являются true, тогда второе условное обозначение всегда будет иметь приоритет над первым. Просто используйте это во втором if: tx.setTypeface(null, Typeface.ITALIC | Typeface.BOLD);
Но теперь, когда вы выбираете только checkBox Italic, тогда также будет активирован Bold
Что ж, это логично. Виноват. В этом случае попробуйте добавить еще одно условие между курсивом и отменой выделения: if (loadCheck1 && loadCheck2) { tx.setTypeface(null, Typeface.BOLD_ITALIC); } и отмените мое предыдущее предложение.
Хорошо, спасибо, что сработало. 3 дополнительных if были необходимы: if (loadCheck1 && loadCheck2) { tx.setTypeface(tx.getTypeface(), Typeface.BOLD_ITALIC); } else if (loadCheck1 && !loadCheck2) { tx.setTypeface(tx.getTypeface(), Typeface.BOLD); } else if (!loadCheck1 && loadCheck2) { tx.setTypeface(tx.getTypeface(), Typeface.ITALIC); }
Большой! Большое спасибо! Но у меня другая проблема. Просмотрите обновленный вопрос.