如何在我的安卓应用程序中设置字体比例?

7

我希望允许用户选择字体大小。

Spare Parts提供了这个功能,

ActivityManagerNative.getDefault().updateConfiguration(new font size scale config)

但是这是针对整个Android应用程序的。我想在我的应用程序首选项中添加它,并且只影响我的应用程序。

我尝试了下面的方法,有时候可以工作,但是第一次启动我的应用程序时,字体大小仍然是1.0倍。我不知道为什么。我在每个活动的onCreate中添加了以下代码。

Configuration config = resources.getConfiguration(); config.fontScale=1.5f; resources.updateConfiguration(config, mDisplayMetrics);

我该怎么办?


你找到答案了吗?我目前也遇到了同样的问题… - dineth
请参见 Activity.getResources().setConfiguration()(或类似内容)。 - njzk2
https://dev59.com/eGEi5IYBdhLWcg3wLJtz#53970324 - 这是如何更新配置并使字体比例在您的应用中被覆盖的方法。 - Maxim Saplin
3个回答

18
下面的代码将允许仅更改应用程序的字体比例尺寸。 在第二行中,代码“configuration.fontScale =(float)1;”将需要更改以满足您的需求。默认情况下,缩放步长为0.15,具有默认值1。 请在调用setContentView(R.layout.yourlayout)之前放置它。
Configuration configuration = getResources().getConfiguration();
configuration.fontScale=(float) 1; //0.85 small size, 1 normal size, 1,15 big etc

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);

希望这能有所帮助!


1
不要在你的Application类的OnConfigurationChanged中使用它;我有一些设备在旋转时似乎会疯狂闪烁。把它放在super.onCreate之后似乎效果很好,而且OnConfigurationChanged无论如何都会再次调用你的onCreate,所以如果用户决定在应用程序运行中更改字体,你就可以设置好了。 - welshk91
1
无法在Android 10和某些Android 9上运行...但可以在低版本的Android上运行。 - Azin Nilchi

1

翻译为Xamarin...

        Android.Content.Res.Configuration configuration = Resources.Configuration;
        configuration.FontScale = (float)1; //0.85 small size, 1 normal size, 1,15 big etc

        Android.Util.DisplayMetrics metrics = new DisplayMetrics();
        this.WindowManager.DefaultDisplay.GetMetrics(metrics);
        metrics.ScaledDensity = configuration.FontScale * metrics.Density;

0

我认为你想要的是将主题应用到你的活动或视图中。

请查看Android文档主题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接