在我的活动中,我以编程方式将语言环境更改为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();
}
我想我的视图应该在我更改区域设置时立即镜像,而不重新启动活动。
答案 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);
它适用于我......毫不拖延