Как изменить размер шрифта во всем приложении программно, 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 () во всех ваших представлениях и текстах макета на экране.

проверьте документацию здесь