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

如何让Android应用强制跟随手机系统语言?

Android应用“自动跟随系统语言”功能修复方案

问题根源

手动切换语言后,Locale.getDefault()会被替换为应用当前使用的语言,而非系统原生语言。因此选择“自动”选项时,获取到的是应用之前设置的语言,而非手机系统的真实语言。

修复步骤

1. 修改语言保存逻辑

将“自动”选项的保存值改为标记字符串(而非具体语言代码),避免混淆系统语言与应用当前语言。

修改Settings.kt中保存语言的代码:

// 原代码
else if(auLa.isChecked){
    codeLang = Locale.getDefault().toString()
}

// 修改后
else if(auLa.isChecked){
    codeLang = "auto" // 存储标记,而非具体语言代码
}

2. 在应用启动时动态设置语言

在BaseActivity的onCreate方法中,根据保存的标记判断是否使用系统语言,确保每次启动应用时都能正确获取系统原生Locale:

import android.os.Build
import android.content.res.Resources
import java.util.Locale

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    
    val preferences = PreferenceManager.getDefaultSharedPreferences(this)
    val selectedLanguage = preferences.getString("language", "en")
    
    val targetLocale = if (selectedLanguage == "auto") {
        // 获取系统原生语言,不受应用自身设置影响
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            Resources.getSystem().configuration.locales.get(0)
        } else {
            Resources.getSystem().configuration.locale
        }
    } else {
        Locale(selectedLanguage)
    }
    
    // 应用语言设置
    Locale.setDefault(targetLocale)
    val configuration = Configuration()
    configuration.locale = targetLocale
    resources.updateConfiguration(configuration, resources.displayMetrics)
}

3. 适配Android 12+(可选)

针对API 31及以上版本,updateConfiguration已被废弃,可改用createConfigurationContext实现:

val config = resources.configuration
config.setLocale(targetLocale)
createConfigurationContext(config)

关键说明

  • 使用Resources.getSystem()能直接获取系统级别的配置,避免应用自身Locale设置干扰
  • 保存“auto”标记而非具体语言代码,让应用每次启动时都能重新读取系统语言状态

内容的提问来源于stack exchange,提问作者Hadj Said Aoumer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:53:19