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