使用首选项在运行时更改语言 [android]

2024-03-07

我读了几遍官方指南 http://developer.android.com/guide/topics/ui/settings.html对于这个,以及许多其他的东西,比如这个网站上的问题,但我不能让我的工作 100%

截至目前,如果我更改列表首选项中的语言,活动 (SettingsActivity) 将不会自行更新(就像 20 次中有 1 次一样,不知何故它会更新,不知道为什么)。按后退按钮后,我的 MainActivity 也没有更新。但我的所有其他活动始终显示正确的语言,如果我返回到 SettingsActivity ,那么如果我重新启动应用程序,就可以了,与 MainActivity 一样。

相关零件:

主要活动:

public class MainActivity extends Activity {

public static final String KEY_PREF_LANGUAGE = "pref_language";

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
}

@Override
protected void onResume() {
    super.onResume();
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);

    String languagePref_ID = sharedPref.getString(KEY_PREF_LANGUAGE, "2");
    switch (languagePref_ID) {
        case "1":
            Locale localeEN = new Locale("en_US");
            setLocale(localeEN);
            break;
        case "2":
            Locale localeHU = new Locale("hu_HU");
            setLocale(localeHU);
            break;

    }
}


public void setLocale(Locale locale) {
    Locale.setDefault(locale);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = locale;
    res.updateConfiguration(conf, dm);
    //recreate();
    //finish();
    //startActivity(getIntent());
    //if these are not commented, main activity wont show at start at all
}

设置活动

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {

public static final String KEY_PREF_LANGUAGE = "pref_language";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new SettingsFragment())
            .commit();
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.OnSharedPreferenceChangeListener listener =
            new SharedPreferences.OnSharedPreferenceChangeListener() {
                public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
                    if (key.equals(KEY_PREF_LANGUAGE)) {
                        String languagePref_ID = prefs.getString(SettingsActivity.KEY_PREF_LANGUAGE, "");
                        switch (languagePref_ID) {
                            case "1":
                                Locale localeEN = new Locale("en_US");
                                setLocale(localeEN);
                                break;
                            case "2":
                                Locale localeHU = new Locale("hu_HU");
                                setLocale(localeHU);
                                break;

                        }
                    }
                }
            };
    sharedPref.registerOnSharedPreferenceChangeListener(listener);
}


public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (key.equals(KEY_PREF_LANGUAGE)) {
        String languagePref_ID = sharedPreferences.getString(SettingsActivity.KEY_PREF_LANGUAGE, "2");
        switch (languagePref_ID) {
            case "1":
                Locale localeEN = new Locale("en_US");
                setLocale(localeEN);
                break;
            case "2":
                Locale localeHU = new Locale("hu_HU");
                setLocale(localeHU);
                break;

        }
    }
    //this doenst even get called but i need it for the implementation
}

public void setLocale(Locale locale) {
    Locale.setDefault(locale);
    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = locale;
    res.updateConfiguration(conf, dm);
    recreate(); //tried like 4 ways to do this, nothing really worked
    //finish();
    //startActivity(getIntent());
}
}

设置Fragment.java

public class SettingsFragment extends PreferenceFragment {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);

}
}

AndroidManifest.xml

android:configChanges="locale|orientation" //added to main and settings activity

我对此感到疯狂,这是最好的工作状态,但我知道这里的活动生命周期管理远非最好,当我尝试使用这些时,通常我根本无法让它工作。我怎样才能使这项工作正常进行,以便它实际上在所有活动的运行时更新?


更改语言后,如果您还想查看更改后的语言,则需要重新启动当前活动。例如这样:

private void restartActivity() {
    Intent intent = getIntent();
    finish();
    startActivity(intent);
}

看看这里的最佳答案如何在应用程序内更改语言(区域设置)后刷新活动 https://stackoverflow.com/questions/8049207/how-to-refresh-activity-after-changing-language-locale-inside-application

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用首选项在运行时更改语言 [android] 的相关文章

  • Firebase 管理 SDK Android

    在 Android 中初始化 Firebase Admin SDK 的代码 Override protected void onCreate Bundle savedInstanceState super onCreate savedIns
  • BottomNavigationView - 如何获取选定的菜单项?

    我使用BottomNavigationView来切换片段 如何获取当前选定的菜单项 以防止重新打开片段 BottomNavigationView bottomNavigationView BottomNavigationView findV
  • 检测到设备正在振动?

    我使用下面的代码来振动设备 public void vibrator try Vibrator vibrator Vibrator getSystemService Context VIBRATOR SERVICE vibrator vib
  • Android 应用程序在后台运行时保存数据

    目前我正在开发 xmmp 客户端 当应用程序位于前台时 该客户端工作得很好 但由于事实上 当应用程序处于后台时 我在 Application 类中保存了大量数据 复杂的 ArrayList 字符串和布尔值作为公共静态 每个字段都被垃圾收集
  • 导航组件重复 NavArgs 的问题

    我有一个片段 class SomeFragment private val args by navArgs
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • 如果我们使用后退按钮退出,为什么 Android 应用程序会重新启动?

    按住主页按钮并返回应用程序时 应用程序不会重新启动 为什么使用后退按钮会重新启动 如果我们使用后退按钮退出 有什么方法可以解决在不重新启动的情况下获取应用程序的问题吗 请帮忙 当您按下Home按钮 应用程序将暂停并保存当前状态 最后应用程序
  • 在 Google Analytics 中跟踪应用程序版本

    我正在使用谷歌分析模块 https marketplace appcelerator com apps 5081 2014113336 https marketplace appcelerator com apps 5081 2014113
  • 在意图过滤器中使用多个操作时的默认值

    尝试理解 Android 中的意图和操作并查看文档 http developer android com guide topics intents intents filters html 但我一直看到的一件事是定义了多个操作的意图过滤器
  • TextView 之间有分隔线

    我正在尝试在 android studio 中创建以下布局 因为我对 android 东西还很陌生 所以我第一次尝试使用 LinearLayout 并认为这可能无法实现 现在我正在尝试使用RelativeLayout 我已经用颜色创建了这个
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • 从 Firebase 数据库填充微调器

    public class MainActivity extends AppCompatActivity DatabaseReference reference Spinner areaSpinner ArrayList
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • SharedFlow 和 StateFlow 的主要区别

    两者有什么区别共享流 and 状态流 以及如何使用这些MVI建筑学 使用简单更好吗Flow或者这些作为状态和事件 Flow 是冷的 意味着它仅在收集数据时才发出数据 另外Flow不能保存数据 可以把它看成是水在里面流动的管道 Flow中的数
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • 无法运行我的应用程序,要求选择 Android SDK

    今天我已经安装了Android Studio 金丝雀 1 现在我无法运行我的应用程序 将出现以下对话框 我已经通过 文件 gt 项目结构 gt Android SDK 位置 设置了正确的 SDK 位置 期待您的帮助来解决这个问题 警告对话框
  • 找到 Android 浏览器中使用的 webkit 版本?

    有没有办法知道某些特定手机上的 Android 浏览器使用的是哪个版本的 webkit 软件 如果有一个您可以浏览以获取该信息的 URL 那就太好了 但任何其他方式也很好 如果你知道 webkit 版本 你就知道 html5 支持多少 至少

随机推荐

  • 将 URI 与 AndroidManifest 中的 相匹配,例如 http://example.com/something

    我正在努力应对
  • 如何使用 WSO2 API Manager 将租户设置为调解器中的标头

    我有一个 API 需要租户作为标头 如果我创建一个自定义顺序
  • laravel查询,多余的行将被插入到表格发票详细信息中。例如FROM表包含6行,执行TO表后将有21行

    ar po id variableAry explode ar foreach variableAry as var1 details11 DB table po estimations gt where po number var1 gt
  • 嵌套角度材质选项卡

    我需要向某些添加动态选项卡User Preferences屏幕 主首选项选项卡可以是具有静态内容的静态选项卡 但第二个选项卡应该嵌套mat tab元素 这些额外的动态首选项来自后端 然后我可以使用 ngFor渲染额外的选项卡 我现在看到的问
  • 处理 CloudKit 错误

    我正在寻找有关在 Swift 中处理 CloudKit 错误的一般建议 但在网上找不到好的示例 这是我想知道的事情 1 每次出现错误的可能性时 我是否应该考虑每种错误类型 或者这实际上没有必要 2 我读到 处理 CloudKit 错误的一种
  • Puppeteer:屏幕截图惰性图像不起作用[重复]

    这个问题在这里已经有答案了 我似乎无法捕获屏幕截图https today line me HK pc https today line me HK pc成功地 在我的 Puppeteer 脚本中 我还启动了滚动到页面底部并再次向上滚动以确保
  • Pandas Dataframe - 值是列表

    我有一个只有一列的 Pandas Dataframe 但每一行的值都是五个元素的列表 如下所示 Column timestamp 06 54 00 1 2 3 4 5 06 55 00 0 5 2 3 4 5 1 3 我想分离数据 以便获得
  • 为什么向量中的分配器是 const ?

    向量在每种类型的构造函数中都有这个 const allocator type alloc allocator type 为什么它是常量 我不明白这有什么用处 我可以看到传入一个分配器 因此多个向量可以共享同一个池 但可以与另一组向量分开 但
  • 像 Matlab 一样的 gnuplot ytics 表示法

    我想设置 ytics 符号 就像这个 Matlab 图 图形框上只有一个 x10 5 一样 是否可以 你当然可以这样做by hand在 gnuplot 中 使用enhanced许多终端的选项并设置label set terminal png
  • 无法理解 a = b = 0 的目的;

    我目前正在阅读 Java 初学者指南 书中的某些地方有一段代码让我感到困惑 但我找不到它的作用的解释 int a int b a b 0 This is the line I don t understand 我所理解的是 0 的值被复制到
  • 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB ]

    我有 PIC18F87J11 系列 并且正在使用 MPLAB C18 编译器 我可以给以下变量的最大字节是多少 我知道我必须修改链接器文件才能达到 256 字节以上 pragma udata CONNECTION TABLE 这是我干净的链
  • Scala 中的执行上下文是什么?

    我是 Scala 新手 正在尝试使用一些并行结构 Future尤其 我发现有一个类型的隐式参数ExecutionContext IMO 它类似于 并且可能比 线程池的概念 我试图通过学习它文档 http docs scala lang or
  • Microsoft UI 自动化教程/参考 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近使用 Microsoft Accessibility API 实现了一个程序 但后来被告知新的
  • 使用双重哈希时,最佳的第二哈希函数是什么?

    我在一些人们使用的论坛上看到 7 key mod 7 or 6 key mod 6 这用于为任何大的键值计算双哈希的第二个哈希函数 使用 6 甚至不是素数 或 7 有什么重要性吗 或者它只是随机生成一些值 与线性探测和二次探测不同 参考 h
  • nbconvert 多索引数据帧到乳胶

    我正在尝试使用 ipython 的 nbconvert 将多索引 Pandas DataFrame 导出到乳胶 但多索引行结果都是错误的 我在代码开头使用以下代码来正确转换为乳胶 我在 SO 上的某个地方找到了它 但不记得在哪里 from
  • ViewPager内的ScrollView,自动滚动到中间

    我有一个 ViewPager 其中包含同一片段的多个实例 该片段包含一篇文章 文章视图层次结构非常简单 一个标题 一个横幅图像 一个副标题和一个正文 除了标题之外的所有内容都包含在滚动视图中 问题是 当您滑动到新页面时 片段会在顶部显示视图
  • 如何在每次测试后重置 Django 测试数据库 ID?

    我有一个 django 应用程序 我正在其上运行一些单元测试 所以我遇到的问题不是当一个测试插入测试数据库时 这是随后的测试 由于每个测试都不保存交易 因此先前测试的条目不存在这很好 尽管自动增量 id 正在增加 就好像数据库中仍然有条目一
  • 如何在 Svelte/Sapper 应用程序中包含 JQuery?

    有许多组件仍然需要我需要使用的 JQuery 不幸的是 在 Svelte Sapper 中执行此操作的最佳方法是什么 我应该使用 ES6 导入 修改汇总 还是最好的方法是什么 例如 我需要包含来自 DevExpress 或 Kendo UI
  • 在 grails 插件安装期间无法解决依赖关系

    我从 PC 中删除了 grails 文件夹 当我在 Intellij IDE 中打开应用程序时 buildConfig groovy 中提到的插件开始安装 安装了一些插件 但有六个插件无法安装 发生以下错误 C Program Files
  • 使用首选项在运行时更改语言 [android]

    我读了几遍官方指南 http developer android com guide topics ui settings html对于这个 以及许多其他的东西 比如这个网站上的问题 但我不能让我的工作 100 截至目前 如果我更改列表首选