如何在RN的Android版本中禁用字体缩放?

5

只需在iOS上使用allowFontScaling={false}即可解决此问题,但我不确定如何在Android上设置。

此外,对于那些不熟悉React Native并从Android标签来到这里的人,我不认为我可以轻松地从sp字体缩放或其他东西切换,所以有没有一种方式可以在我的应用程序中全局实现它?

谢谢!


你是否考虑根据屏幕密度设置字体值?在Android中,文本大小使用“sp”设置,表示字体应缩放以在具有更高像素密度的屏幕上显示为相同的物理大小。如果您为所涉及的文本大小定义了一个“dimen”属性,然后为每个屏幕密度(mdpi、hdpi、xhdpi、xxhdpi和xxxhdpi)创建不同的“dimens.xml”文件,并确定每个屏幕密度的字体大小,那么这听起来就可以实现您想要的效果。 - Jace J McPherson
@JaceJMcPherson 我不确定我理解了。您能否解释在RN中如何使用“sp”设置Text元素的文本大小? - Zohar Levin
我也遇到了同样的问题。如果你找到了解决方案,请告诉我。 - Prasanna
1个回答

13

请更新ManiApplication.java文件

import android.view.WindowManager;
import android.content.res.Configuration;
import android.content.Context;
import android.util.DisplayMetrics;

super.onCreate(); 方法后添加 adjustFontScale(getApplicationContext(),getResources().getConfiguration());

像下面这样:

  @Override
  public void onCreate() {
    super.onCreate();
    adjustFontScale(getApplicationContext(),getResources().getConfiguration());
}

最后添加以下函数

public void adjustFontScale(Context context, Configuration configuration) {
    if (configuration.fontScale != 1) {
        configuration.fontScale = 1;
        DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        wm.getDefaultDisplay().getMetrics(metrics);
        metrics.scaledDensity = configuration.fontScale * metrics.density;
        context.getResources().updateConfiguration(configuration, metrics);
    }
}

1
我们需要在 Stack Overflow 上添加一个强制接受功能,以防 OP 这样退出。 - Serge Seredenko
@SergeSeredenko 我并没有“放弃”……他实际上是在一年后回答的,我的问题现在甚至已经不相关了。我会将其标记为已接受,仅仅基于它“似乎”是正确的,但我无法验证它,所以我没有标记它。 - Tallboy
1
@Tallboy 抱歉,我的意思不是有恶意的!我只是在考虑一个类似于关闭投票的接受投票功能。 - Serge Seredenko

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