Как изменить размер шрифта во всем приложении программно, Android?
Я создал Spinner со списком размеров шрифтов от "8" до "46". Я мог бы щелкнуть размер шрифта, и в спиннере он показал мне .
Мне нужно, если я нажму размер шрифта " 26 " внутри блесны, то он должен быть применен ко всему моему проекту. Например, применение к моему экрану, внешний вид Textview, Edittext-Bold / Italic и т. д. Опять же, если я нажму 46 размер, то он должен быть применен ко всему моему проекту.
Как я могу сделать это программно ?
4 ответов
вероятным решением были бы вы создать базовый класс, который расширяет TextView, и используйте этот класс представления текста в качестве текста редактирования. Надеюсь, вы просите размер в первом экране. В любом случае, установить размер текста в базовом классе. Это решит вашу проблему.
Как создать этот класс в пакете com.пример и имя класса BaseTextView, затем в xml-файле вместо <TextView .../>
вы пишите <com.example.BaseTextView ... />
надеюсь, что это помогает.
Android
документация не конкретна о наиболее эффективном способе изменения размера шрифта глобально через выбор пользователя на уровне приложения.
есть проблема, я думаю, с ответ дано Черт.
проблема в том, что многие Android
виджеты подкласс TextView
, например Button
, RadioButton
и CheckBox
. Некоторые из них являются косвенными подклассами TextView
, которое делает снабжать подгонянный версия TextView
в этих классах очень сложно.
но как указал Сиддхарт Леле в своем комментарии, используя styles
или themes
гораздо лучший способ справиться с изменением размера шрифта во всем приложении.
мы устанавливаем стили для макетов, чтобы контролировать внешний вид представления. Темы-это, по сути, просто коллекции этих стилей. Однако мы можем использовать тему только для настроек размера текста; без определения значений для каждого свойства. Использование темы над стилями дает нам одно огромное преимущество: мы можем установить тему для всего представления программно.
тема.в XML
<resources>
<style name="FontSizeSmall">
<item name="android:textSize">12sp</item>
</style>
<style name="FontSizeMedium">
<item name="android:textSize">16sp</item>
</style>
<style name="FontSizeLarge">
<item name="android:textSize">20sp</item>
</style>
</resources>
создать класс для обработки загрузки наших предпочтений:
public class BaseActivity extends Activity {
@Override
public void onStart() {
super.onStart();
// Enclose everything in a try block so we can just
// use the default view if anything goes wrong.
try {
// Get the font size value from SharedPreferences.
SharedPreferences settings =
getSharedPreferences("com.example.YourAppPackage", Context.MODE_PRIVATE);
// Get the font size option. We use "FONT_SIZE" as the key.
// Make sure to use this key when you set the value in SharedPreferences.
// We specify "Medium" as the default value, if it does not exist.
String fontSizePref = settings.getString("FONT_SIZE", "Medium");
// Select the proper theme ID.
// These will correspond to your theme names as defined in themes.xml.
int themeID = R.style.FontSizeMedium;
if (fontSizePref == "Small") {
themeID = R.style.FontSizeSmall;
}
else if (fontSizePref == "Large") {
themeID = R.style.FontSizeLarge;
}
// Set the theme for the activity.
setTheme(themeID);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
наконец, создайте действия, расширив BaseActivity, например:
public class AppActivity extends BaseActivity{
}
поскольку большинство приложений имеют гораздо меньшее количество действий, чем TextViews или виджеты, которые наследуют TextView. Это будет экспоненциально, так как сложность увеличивается, поэтому это решение требует меньше изменений в коде.
спасибо Рэй Kuhnell
вы можете масштабировать до размера текста вашего приложения вверх / вниз с помощью базовой конфигурации активности, сделать все действия присущими базовой активности.
масштабировать нормальное значение 1.0, 2.0 удвоит размер шрифта и .50 бы сделать это наполовину.
public void adjustFontScale( Configuration configuration,float scale) {
configuration.fontScale = scale;
DisplayMetrics metrics = getResources().getDisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adjustFontScale( getResources().getConfiguration());
}
создайте функцию и передайте значение размера счетчика как
void setSize(int size){
...
setTextSize()
// on All of the layout texts and views on screen
}
вызовите setTextSize () во всех ваших представлениях и текстах макета на экране.
проверьте документацию здесь