点击按钮切换语言

10
当我点击“sub_changelang”按钮时,应该将程序语言更改为法语。我有以下代码来更改区域设置,但我不知道如何刷新/更新应用程序以更改语言为法语。
Button cl = (Button) findViewById(R.id.sub_changelang); 
cl.setOnClickListener(new OnClickListener()
{ 
    @Override 
    public void onClick(View v)
    { 
        Locale locale = new Locale("fr_FR"); 
        Locale.setDefault(locale); 
        Configuration config = new Configuration(); 
        config.locale = locale; 
    } 
});

它不能工作。我该如何修复它?我尝试添加:

MainActivity.this.getResources().updateConfiguration(config, MainActivity.this.getResources().getDisplayMetrics());

但是它没有起作用。我还尝试了:

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

它也没有起作用。

android:configChanges="locale"

AndroidMainfest.xml 中的 application -> activity 里设置


更改语言环境后,您需要重新启动Activity。 - Vivek Kumar Srivastava
1
它确实改变了按钮的文本,但没有改变整个应用程序的用户界面。 - Ron
我正在使用与您相同的代码...我的应用程序运行良好。 - Vivek Kumar Srivastava
只需查看下一个屏幕的用户界面(UI)。 - Vivek Kumar Srivastava
1
我的意思是,它没有改变应用程序名称(在用户界面本身中) - Ron
显示剩余3条评论
2个回答

16

我正在使用这段代码来设置语言环境

String languageToLoad  = "fr_FR";
     Locale locale = new Locale(languageToLoad); 
     Locale.setDefault(locale);
     Configuration config = new Configuration();
     config.locale = locale;
     context.getResources().updateConfiguration(config,context.getResources().getDisplayMetrics());

Intent intent = new Intent(XYZ.this, XYZ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这里的上下文是应用基础上下文。 请尝试使用"fr"而不是"fr_FR",因为我正在为阿拉伯语环境工作,它可以正常运行。

更改语言环境后需要重新启动活动。


你知道如何在导航抽屉中使用碎片吗?它可以工作,但我只有一个MainActivity,其他都是片段,那么我该如何将其更改为片段?如果我将其更改为另一个片段,它会意图到MainActivity吗? - Sasha
这个线程与片段无关。您可以就此提出新问题或搜索相同的线程。顺便说一下,您可以设置监听器以了解片段更改事件,然后根据您的片段要求更新导航抽屉。请参阅此文档引用http://developer.android.com/reference/android/app/FragmentManager.OnBackStackChangedListener.html。 - Vivek Kumar Srivastava
如何在不重新启动活动的情况下更改文本。 - Abhi S

7

您可以使用activity.this.recreate()。但它只支持API级别11及以上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接