如何覆盖Android应用程序中的配置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何覆盖Android应用程序中的配置?相关的知识,希望对你有一定的参考价值。

解决了(底部的解决方案)

在我的活动中,我需要阅读首选项,然后覆盖配置。在构造函数中,Context还没有准备好:

尝试在空对象引用上调用虚方法'java.lang.String android.content.Context.getPackageName()'

onCreate,为时已晚:

java.lang.IllegalStateException:已经调用了getResources()

来自ContextThemeWrapper documentation的报价:

此[applyOverrideConfiguration]方法只能调用一次,并且必须在调用getResources()或getAssets()之前调用。

覆盖配置的正确时间和地点是什么?

代码摘自我目前的工作解决方案。

class OverrideActivity extends AppCompatActivity {

    // ...

    private boolean __overrideConf = false;

    @Override
    public Resources getResources() {
        if (!__overrideConf) {
            // ...
            // read shared preferences needs context
            // ...
            applyOverrideConfiguration(configuration);
            __overrideConf = true;
        }
        return super.getResources();
    }
}

解决方案(覆盖受保护的方法attachBaseContext

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(newBase);
    applyOverrideConfiguration(new Configuration());
}
答案

解决方案(覆盖受保护的方法attachBaseContext

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(newBase);
    // copypaste safe code
    applyOverrideConfiguration(new Configuration());
}

以上是关于如何覆盖Android应用程序中的配置?的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖 Android 应用程序中的配置?

如何覆盖Android应用程序中的配置?

Android片段z-index覆盖

片段覆盖整个android编辑屏幕

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

如何从Android中的片段单击按钮打开片段