Android 自定义多语言支持

Android 自定义多语言支持,android,Android,我知道用语言代码的后缀为该语言创建了一个新的值目录。对于德语:values de或法语:values fr,然后将我们的string.xml复制到其中并翻译每个条目。这是基于手机本地化设置的 我想知道我们是否可以绕过手机设置,让用户在应用程序中选择所需的语言 我的要求是,我想在我的应用程序中提供一个语言选择选项,并让用户为应用程序选择他想要的语言。。如何在string.xml(不同语言)之间动态切换 提前感谢查看此帖子。。。基本上是一样的 创建设置基本区域设置的方法 public static

我知道用语言代码的后缀为该语言创建了一个新的值目录。对于德语:values de或法语:values fr,然后将我们的string.xml复制到其中并翻译每个条目。这是基于手机本地化设置的

我想知道我们是否可以绕过手机设置,让用户在应用程序中选择所需的语言

我的要求是,我想在我的应用程序中提供一个语言选择选项,并让用户为应用程序选择他想要的语言。。如何在string.xml(不同语言)之间动态切换


提前感谢

查看此帖子。。。基本上是一样的


创建设置基本区域设置的方法

public static void setDefaultLocale(Context context,String locale) {
        Locale locJa = new Locale(locale);
        Locale.setDefault(locJa);

        Configuration config = new Configuration();
        config.locale = locJa;

        context.getResources().updateConfiguration(config, context.getResources()
                .getDisplayMetrics());

        locJa = null;
        config = null;
    }
现在检查用户何时选择语言环境。(这里基本上我使用了语言选择菜单)


如果你想根据各自的语言获取图像,你应该像下面这样创建布局文件夹

Locale appLoc = new Locale("xx");
Locale.setDefault(appLoc);
Configuration appConfig = new Configuration();
appConfig.locale = appLoc;
getBaseContext().getResources().updateConfiguration(appConfig,
    getBaseContext().getResources().getDisplayMetrics()); 
你的布局文件夹应该是layout xx,你的drawable文件夹也应该是drawable-xx。但有一件事是,当你更改语言时,你必须刷新布局。我在我的应用程序中使用了一个按钮并设置背景图像。但有时图像不会更改,所以我就是这样做的

btn.setBackgroundDrawable(null);
btn.setBackgroundResource(R.drwable.yourimage);


-有关详细信息,请参见:

为什么在setDefaultLocale末尾将locJa和config设置为null?无论如何,它们都将超出范围……不,没有理由将它们设置为null。此处发布的方法代码直接取自我的应用程序,因此我正在制作它们,因为在我的应用程序中没有进一步使用。您可以使用以下库,它提供语言列表、设置屏幕的首选项,并覆盖应用程序中的语言:
Locale appLoc = new Locale("xx");
Locale.setDefault(appLoc);
Configuration appConfig = new Configuration();
appConfig.locale = appLoc;
getBaseContext().getResources().updateConfiguration(appConfig,
    getBaseContext().getResources().getDisplayMetrics()); 
btn.setBackgroundDrawable(null);
btn.setBackgroundResource(R.drwable.yourimage);
 languageToLoad = "hi"; // your language
        locale = new Locale(languageToLoad);
        Locale.setDefault(locale);
        config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());
        this.setContentView(R.layout.activity_main);