You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio测验游戏如何禁用系统字体大小影响

解决Android测验游戏字体不受系统字体大小影响的问题

嘿,这个问题我熟!很多游戏开发者都会碰到——毕竟游戏的UI布局和字体大小都是精心设计的,系统字体缩放很容易打乱节奏。下面给你几种不同场景的解决方案,按需选就行:

全局应用级解决方案(推荐)

如果希望整个游戏的所有字体都不受系统设置影响,直接在你的Application类里配置就行,一次设置全应用生效:

Java 代码

@Override
public void onCreate() {
    super.onCreate();
    // 获取当前应用的配置信息
    Configuration config = getResources().getConfiguration();
    // 强制将字体缩放比例设为1.0(即完全不跟随系统缩放)
    config.fontScale = 1.0f;
    // 更新配置,第二个参数传0表示不修改屏幕密度
    getResources().updateConfiguration(config, getResources().getDisplayMetrics());
}

Kotlin 代码

override fun onCreate() {
    super.onCreate()
    val config = resources.configuration
    config.fontScale = 1.0f
    resources.updateConfiguration(config, resources.displayMetrics)
}

注意:Android 17(API 17)及以上版本中,updateConfiguration被标记为过时,推荐用createConfigurationContext替代,写法如下:

Configuration config = new Configuration(getResources().getConfiguration());
config.fontScale = 1.0f;
Context adjustedContext = createConfigurationContext(config);
getResources().updateConfiguration(config, adjustedContext.getResources().getDisplayMetrics());

设置完成后,记得重启应用才能生效,之后不管用户怎么调系统字体大小,你的游戏字体都会保持固定尺寸。

单个Activity级解决方案

如果只想让某几个游戏页面(比如主菜单、答题页)不受系统字体影响,把上面的配置代码放到对应ActivityonCreate方法里就行,不用全局设置。

单个控件级精细控制

要是你只想固定某几个文本(比如题目文字、得分数字)的大小,其他文本还是跟随系统,那可以直接在代码里用像素单位设置字体大小,避开会缩放的sp单位:

Java 代码

// 从dimen资源中获取固定像素值,然后用COMPLEX_UNIT_PX设置
TextView questionText = findViewById(R.id.tv_question);
questionText.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
    getResources().getDimensionPixelSize(R.dimen.fixed_question_text_size));

XML 配置替代方案

在布局XML里,把原来的sp单位改成dp单位(dp是密度无关像素,不会跟随系统字体缩放),比如:

<!-- 原来的sp单位(会跟随系统缩放) -->
<TextView
    android:id="@+id/tv_question"
    android:textSize="18sp" />

<!-- 修改为dp单位(固定大小) -->
<TextView
    android:id="@+id/tv_question"
    android:textSize="18dp" />

小提示:dp和默认缩放的sp视觉大小差不多,但如果系统字体缩放比例不是1.0,dp就会保持原大小,你可能需要微调数值来匹配原本的设计。

额外注意事项

如果你的游戏里用到了WebView展示内容,还需要单独给WebView设置固定缩放:

WebView webView = findViewById(R.id.web_view);
webView.getSettings().setTextZoom(100); // 设置为100%,即不缩放

内容的提问来源于stack exchange,提问作者Marios

火山引擎 最新活动