如何在 Android 中以编程方式更改字体大小?

How to change font size programmatically in Android?

我需要在运行时更改应用程序的字体大小。我提到了以下 SO post,他们谈到通过 styles.xml 应用字体大小并应用它。我认为它仅适用于特定元素(如 TextView 或布局),但是否可以在应用程序级别应用字体大小,是否可以通过编程方式设置它?

查看您的文本TextView textView 并应用 setTextSize(size)

textView.setTextSize(20);

请注意,大小以像素为单位,而不是 dp 中的 styles.xml 布局

是,设置文字大小为:

textView.setTextSize(20)// text size

在这里添加了一些东西:)

1.If你想设置为DP

textView.setTextSize(coverPixelToDP(20));
    
private int coverPixelToDP (int dps) {
    final float scale = this.getResources().getDisplayMetrics().density;
    return (int) (dps * scale);
}

2.If您想自动调整字体大小以适应边界使用,

setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)

JAVA版本

TextView textView = new TextView(this);
textView.setText("Adjust font size for dynamic text");
//only works when width = 'match_parent', and give height
LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 500); 
           
textView.setLayoutParams(p1);
textView.setAutoSizeTextTypeUniformWithConfiguration(8, 15, 1, TypedValue.COMPLEX_UNIT_DIP); 

XML 版本(以编程方式)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <TextView
      android:layout_width="match_parent" // make sure it is match_parent
      android:layout_height="500dp" //make sure you give height 
      app:autoSizeTextType="uniform"
      app:autoSizeMinTextSize="12sp"
      app:autoSizeMaxTextSize="100sp"
      app:autoSizeStepGranularity="2sp" />

</LinearLayout>