猿问

Android 配置更改导致布局方向发生变化

我有一些像 Note3 这样的设备在纵向模式下设计的问题 当我将应用程序的语言更改为 RTL 时我同时支持 RTL 和 LTR 它工作正常但是当我用相机拍照时设备旋转并返回时对于应用程序,应用程序忽略定义的语言环境并使用英语的设备语言环境,应用程序的方向更改为 LTR 但使用 RTL 的字符串,直到您导航到另一个屏幕,所有应用程序都将变为 LTR,这仅在以下情况发生设备语言环境仅为英语。当设备区域设置为阿拉伯语时,这不会发生。这是我的语言环境代码


public class MvpApp extends Application {

AppDataManager dataManager;

private Locale locale = null;

private String language;


@Override

public void onCreate() {

    super.onCreate();


    Fresco.initialize(this);

    final Fabric fabric = new Fabric.Builder(this)

            .kits(new Crashlytics())

            .debuggable(true)

            .build();

    Fabric.with(fabric);

    AppPreferencesHelper preferencesHelper = new AppPreferencesHelper(getApplicationContext());

    ApiModule apiModule = new ApiModule(getApplicationContext());

    dataManager = new AppDataManager(getApplicationContext(),

            preferencesHelper, apiModule.provideApiService());


    String lang = dataManager.getLanguage();


    if (lang == null)

        language = "en";

    else language = lang;


    LocaleHelper.setLocale(getApplicationContext(),language);



}


@Override

public void onConfigurationChanged(Configuration newConfig) {

    super.onConfigurationChanged(newConfig);

    if (locale != null) {

        newConfig.locale = locale;

        Locale.setDefault(locale);

        newConfig.setLayoutDirection(locale);

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

    }

}



public AppDataManager getDataManager() {

    return dataManager;

}


胡子哥哥
浏览 158回答 1
1回答

慕桂英3389331

我设法克服了这个问题,但在活动中覆盖了 onConfigurationChanged 并在清单中添加了这一行android:configChanges="orientation|screenSize|layoutDirection|locale"@Overridepublic void onConfigurationChanged(Configuration newConfig) {    super.onConfigurationChanged(newConfig);    Locale locale = new Locale(presenter.getLanguage());    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {        newConfig.setLocale(locale);        Locale.setDefault(locale);        newConfig.setLayoutDirection(locale);        this.createConfigurationContext(newConfig);    } else {        newConfig.locale = locale;        Locale.setDefault(locale);        newConfig.setLayoutDirection(locale);        getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答