如何在不重新启动活动的情况下将应用程序区域设置更改为RTL语言后,如何刷新视图

时间:2015-10-29 05:30:59

标签: android localization

在我的活动中,我以编程方式将语言环境更改为RTL语言。之后,我希望我的布局根据RTL语言环境刷新,而不重新启动活动。

以下是代码:

public void setLocale()

{
    String arr[] = LangCode.split("_");
    Configuration config = new Configuration();

    DisplayMetrics dm = this.getResources().getDisplayMetrics();

    Locale locale = new Locale(arr[0], arr[1]);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Locale.setDefault(locale);
        config.setLocale(locale);
        config.setLayoutDirection(locale);
    } else {
        config.locale = locale;
    }

    this.getResources().updateConfiguration(config, dm);

}

之后我试图使视图无效,但没有成功。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

    findViewById(R.id.intro_lang_ll).invalidate();

    findViewById(R.id.intro_lang_ll).requestLayout();

}

我想我的视图应该在我更改区域设置时立即镜像,而不重新启动活动。

2 个答案:

答案 0 :(得分:1)

如果您不想刷新整个Activity,则可以使用invalidate(),如下所示:

public void invalidate () 

它使整个视图无效。

如果视图可见,将来某个时候将调用onDraw(Canvas)。必须从UI线程调用此方法。 要从非UI线程调用,请调用postInvalidate()。

答案 1 :(得分:0)

你可以试试这个

Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);

它适用于我......毫不拖延