为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

胡子哥哥 2021-10-20 16:19:22
我有一些像 Note3 这样的设备在纵向模式下设计的问题 当我将应用程序的语言更改为 RTL 时我同时支持 RTL 和 LTR 它工作正常但是当我用相机拍照时设备旋转并返回时对于应用程序,应用程序忽略定义的语言环境并使用英语的设备语言环境,应用程序的方向更改为 LTR 但使用 RTL 的字符串,直到您导航到另一个屏幕,所有应用程序都将变为 LTR,这仅在以下情况发生设备语言环境仅为英语。当设备区域设置为阿拉伯语时,这不会发生。这是我的语言环境代码public class MvpApp extends Application {AppDataManager dataManager;private Locale locale = null;private String language;@Overridepublic 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);}@Overridepublic 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;}
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

我设法克服了这个问题,但在活动中覆盖了 onConfigurationChanged 并在清单中添加了这一行


android:configChanges="orientation|screenSize|layoutDirection|locale"


@Override

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

    }

}


查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信