android - 在有问题地将应用程序区域设置更改为 RTL 语言后,如何在不重新启动 Activity 的情况下刷新 View

标签 android localization

在我的 Activity 中,我以编程方式将区域设置更改为 RTL 语言。之后,我希望我的布局根据 RTL 语言环境进行刷新,而无需重新启动 Activity。

这是它的代码:

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);

}

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

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();

}

我希望在不重新启动 Activity 的情况下更改语言环境后,我的 View 应立即镜像自身。

最佳答案

如果你不想刷新你的整个 Activity 那么你可以使用 invalidate() 如下:

public void invalidate () 

它使整个 View 无效。

如果 View 是可见的,onDraw(Canvas) 将在未来的某个时刻被调用。这必须从 UI 线程调用。 要从非 UI 线程调用,请调用 postInvalidate()。

关于android - 在有问题地将应用程序区域设置更改为 RTL 语言后,如何在不重新启动 Activity 的情况下刷新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33406581/

相关文章:

java - Android错误,无法实例化服务...接口(interface)无法实例化

iphone - iPhone-SDK中各个国家的 "currency decimal places width"

iphone - 为什么我的文件不移动到 "en.lproj",而是移动到 Xcode 中 "English.lproj"之后的新 "Make file Localizable"?

android - FMX : How can I select a Fixed Font in Android

android - 从 Kotlin Anko 中的两个表中选择数据

java - CodenameOne 应用程序构建给出 Retrolambda IllegalArgumentException

Android(Linux) 的 mount(8) 通过本地 shell 和 adb 影响不同的进程

iphone - 如何知道 iOS 设备何时插入?

java - 如何使用 libGDX 中的 I18NBundle 更改游戏中的语言?

c# - 使用资源文件进行本地化