Как изменить размер шрифта во всем приложении программно, Android?

Я создал Spinner со списком размеров шрифтов от "8" до "46". Я мог бы щелкнуть размер шрифта и в прядильщике, который он показал мне.

Моя потребность в том, что если я нажму "Размер шрифта" "26" внутри Spinner, тогда он будет применяться ко всему моему проекту. Например, применительно к моему экрану, внешнему виду Textview, Edittext - Bold/Italic и т.д. Опять же, если я нажму 46, тогда он должен применяться ко всему моему проекту.

Как я мог это сделать программным путем?

Ответ 1

Вероятным решением будет создание базового класса, который расширяет TextView, и использует этот класс текстового вида в качестве текста редактирования. Надеюсь, вы просите размер на первом экране. В любом случае, u задайте размер текста в базовом классе. Это решит вашу проблему.

как и создать этот класс в пакете com.example, а имя класса - BaseTextView, затем в xml файле вместо <TextView.../> вы напишете <com.example.BaseTextView.../>

Надеюсь это поможет.

Ответ 2

Документация для Android не является конкретной для наиболее эффективного способа изменения размера шрифта во всем мире с помощью выбора пользователей на уровне приложения.

Я думаю, что проблема связана с ответом Черного Дьявола.

Проблема в том, что многие подклассы Android widgets TextView, такие как Button, RadioButton и CheckBox. Некоторые из них являются косвенными подклассами TextView, что очень затрудняет реализацию настраиваемой версии TextView в этих классах.

Однако, как отметил Сиддхарт Леле в своем комментарии, использование styles или themes - гораздо лучший способ справиться с изменением размера текста во всем приложении.

Мы устанавливаем стили для макетов, чтобы контролировать внешний вид и вид. Темы - это просто коллекции этих стилей. Однако мы можем использовать тему только для настроек размера текста; без определения значений для каждого свойства. Использование темы по стилям дает нам одно огромное преимущество: мы можем установить тему для всего представления программно.

theme.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{
}

Поскольку большинство приложений имеют намного меньшее количество операций, чем TextView или виджеты, которые наследуют TextView. Это будет экспоненциально, так как сложность возрастает, поэтому это решение требует меньших изменений кода.

Благодаря Рэю Куннелу

Ответ 3

Создайте функцию и передайте значение размера счетчика в качестве

void setSize(int size){
...
setTextSize()
// on All of the layout texts and views on screen

}

Вызовите setTextSize() для всех ваших видов и макетов на экране.

Ознакомьтесь с документацией здесь

Ответ 4

вы можете масштабировать до размера текста вашего приложения вверх/вниз, используя базовую активность. Конфигурация, сделать все действия неотъемлемой базой.

Нормальное значение масштаба 1,0, 2.0 удвоит размер шрифта, а 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());
}