【问题标题】:Onclick button language change in java androidjava android中的Onclick按钮语言更改
【发布时间】:2015-02-08 02:42:44
【问题描述】:

我正在寻找一种方法来实现由按钮 onclick 触发的语言更改。我在适当的文件夹中创建了适当的 strings.xml(例如 res/values-en/)这是我的按钮代码:

Button setEN_bt = (Button) findViewById(R.id.setEN);        
setEN_bt.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Locale locale_en = new Locale("en"); 
            Locale.setDefault(locale_en);
            Configuration config_en = new Configuration();
            config_en.locale = locale_en;
            getBaseContext().getResources().updateConfiguration(config_en, getBaseContext().getResources().getDisplayMetrics());
        }
    });

所以基本上我用 onclick 更改了语言环境,但页面之后不会刷新(为什么应该......:))。有人可以告诉我如何刷新/重新加载活动吗?

提前感谢您的帮助。

【问题讨论】:

  • 尝试在更改语言环境后调用 setContentView()

标签: java android


【解决方案1】:

你可以试试打电话

view.invalidate();

在要重绘的视图上。

我不确定这是否会重新加载语言环境。如果没有,您可以通过为自己创建一个新的 Intent 来重新启动 Activity:

Intent intent = new Intent(this, Activity.class);
startActivity(intent);

干杯

【讨论】:

  • 谢谢回复。我使用了这个: v.invalidate() 但它不起作用,所以我尝试了 Intend 但它也不起作用。好像不能叫“这个”。在按钮侦听器的方法中。有什么线索吗?也许我可以以某种方式将它传递给方法。
  • 如果您在监听器中,请尝试使用 .this。例如“new Intent(CurrentActivity.this, NewActivity.class)”。
  • 感谢弗洛里安它成功了。这是代码: Intent intent = new Intent(InvestWroclawActivity.this, InvestWroclawActivity.class);开始活动(意图);
  • @Florian Barth 你知道如何使用导航抽屉进入片段吗?
  • 苏丹,“如何成为碎片”是什么意思?
【解决方案2】:

您可以通过使用来启动活动

startActivity(new Intent(CurrentActivity.this, CurrentActivity.class)); 结束(); 并在 onclick 方法的最后使用 finish() 方法完成上一个活动。

【讨论】:

  • 是的。我在上面的评论中做到了,谢谢。
【解决方案3】:

您可以调用:

recreate(); // which is available from API Level 11.

我在这里找到了这个答案,它对于较低的 API 级别还有另一种很好的方法: How do I restart an Android Activity

【讨论】:

  • 这很容易,但我希望这种方法没有缺点。谢谢你:)
【解决方案4】:

第一种方法

     String languageToLoad  = "en";
     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);//it will recreate it self with new language.
     startActivity(intent);

更改区域设置后,您需要重新启动 Activity。

第二种方法

 mLocale = new Locale("en");
          Locale.setDefault(mLocale); 
          Configuration config = new Configuration();
          config.locale = mLocale;
          getBaseContext().getResources().updateConfiguration(config, 
          getBaseContext().getResources().getDisplayMetrics());
          MainActivity.this.setContentView(R.layout.activity_main);//reset layout 

但它适用于api>=11

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2021-03-26
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多