You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android切换设备语言后TextView显示异常,如何强制使用默认strings.xml?

解决Android应用强制使用葡萄牙语资源的问题

嘿,这个问题我之前帮人排查过,本质是Android的资源加载机制在设备语言匹配不到应用对应资源时,会触发fallback逻辑,导致意外加载了其他语言的字符串。咱们一步步来搞定它:

第一步:清理多余的语言资源文件夹

首先检查你的项目res目录下,有没有类似values-es、values-en这类带语言后缀的文件夹——如果有的话,直接删掉!因为Android会优先加载与设备语言匹配的资源文件夹里的内容,哪怕你没主动添加,也可能是第三方库或者误操作引入的。

第二步:强制应用全局使用葡萄牙语Locale

这是最稳妥的方式,不管系统设置什么语言,咱们直接把应用的默认Locale锁死在葡萄牙语。你需要在自定义的Application类里添加以下代码:

适配全版本的Locale设置代码

import android.app.Application;
import android.content.res.Configuration;
import android.os.Build;
import java.util.Locale;

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 设置葡萄牙语(如果是欧洲葡萄牙语,把第二个参数改成"PT")
        Locale ptLocale = new Locale("pt", "BR");
        Locale.setDefault(ptLocale);
        
        Configuration config = getResources().getConfiguration();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            // Android 7.0及以上需要处理LocaleList
            config.setLocale(ptLocale);
            config.setLocales(new LocaleList(ptLocale));
        } else {
            config.setLocale(ptLocale);
        }
        // 更新配置
        getResources().updateConfiguration(config, getResources().getDisplayMetrics());
    }
}

别忘了在AndroidManifest.xml的<application>标签里指定这个自定义Application:

<application
    android:name=".MyApp"
    ...>
    ...
</application>

第三步:(可选)声明应用仅支持葡萄牙语

为了让系统更明确知道你的应用只支持葡萄牙语,可以添加一个locale配置文件:

  1. 在res/xml目录下创建locale_config.xml(没有xml文件夹就新建一个)
  2. 写入以下内容:
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
    <locale>pt</locale>
    <locale>pt-BR</locale> <!-- 可选,针对巴西葡萄牙语 -->
</locale-config>
  1. 在AndroidManifest.xml的<application>标签里引用它:
<application
    ...
    android:localeConfig="@xml/locale_config">
    ...
</application>

为什么会出现这个问题?

当设备语言设为西班牙语时,Android会先尝试寻找values-es下的字符串资源。如果找不到,它会沿着语言 fallback链去匹配(比如西班牙语和葡萄牙语同属罗曼语族,系统可能会优先匹配这类相近语言的资源),但如果你的应用里没有这些资源,就可能出现显示异常——而强制设置Locale后,应用会直接加载默认values/strings.xml里的葡萄牙语内容,完全跳过系统的语言匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:24:55