Android 加载Admob/Firebase广告后,DayNight主题中出现颜色中断

Android 加载Admob/Firebase广告后,DayNight主题中出现颜色中断,android,firebase,admob,android-theme,Android,Firebase,Admob,Android Theme,我为我的应用程序使用Theme.AppCompat.DayNight.NoActionBar主题。当我加载adMob Intersital时,一些颜色在“夜间”模式下(即在RecyclerView中)被破坏 屏幕: 这些不正确的颜色来自“notnight”值。 当我关闭应用程序并再次运行时,一切正常。 当我关闭应用程序时,我遇到了同样的情况 活动代码: public class MainActivity extends AppCompatActivity { static {

我为我的应用程序使用
Theme.AppCompat.DayNight.NoActionBar
主题。当我加载adMob Intersital时,一些颜色在“夜间”模式下(即在RecyclerView中)被破坏

屏幕:

这些不正确的颜色来自“notnight”值。 当我关闭应用程序并再次运行时,一切正常。 当我关闭应用程序时,我遇到了同样的情况

活动代码:

public class MainActivity extends AppCompatActivity {

    static {
        AppCompatDelegate.setDefaultNightMode(
                AppCompatDelegate.MODE_NIGHT_AUTO);
    }

    private ArrayList<String> planetList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        setContentView(R.layout.activity_main);

        populateRecycler();

        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);

        PlanetAdapter adapter = new PlanetAdapter(planetList, getApplicationContext());
        recyclerView.setAdapter(adapter);

        InterstitialAd interstitialAd = new InterstitialAd(this);
        interstitialAd.setAdUnitId("ca-app-pub-543543543/543543543");
        AdRequest adRequest = new AdRequest.Builder().build();
        interstitialAd.loadAd(adRequest);
    }

    private void populateRecycler() {
        for (int i = 0; i < 20; i++) {
            planetList.add("TEST");
        }
    }

}
public类MainActivity扩展了AppCompatActivity{
静止的{
AppCompatDelegate.setDefaultNightMode(
应用程序(模式为夜间自动);
}
private ArrayList planetList=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateRecycler();
RecyclerView RecyclerView=(RecyclerView)findViewById(R.id.recycler\u视图);
LinearLayoutManager layoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
PlanetAdapter=新的PlanetAdapter(planetList,getApplicationContext());
recyclerView.setAdapter(适配器);
interstitalad interstitalad=新的interstitalad(本);
间质性setAdUnitId(“ca-app-pub-543543543/543543543”);
AdRequest AdRequest=新建AdRequest.Builder().build();
间质负荷(adRequest);
}
私有void populateRecycler(){
对于(int i=0;i<20;i++){
添加平面列表(“测试”);
}
}
}
当我评论interstitalad.loadAd(adRequest)时,一切都正常

您可以在此处找到整个项目:
该问题可能是由
WebView
重置UI模式引起的,可以通过手动实例化
WebView
来解决

在执行此操作后,我没有看到问题(在此特定应用程序中的
Application.oncreate()
):


资料来源:

哇,非常感谢你,这很有效!我搜索了很长时间,但没有成功。我认为你的帖子和google group论坛上的讨论是关于这个(非常关键和困难的)主题/bug的唯一讨论。这不再是一个问题,也不需要继续依赖于解决方法。谷歌已经解决了这个问题,我们只需要将appcompat更新到最低限度。我在设置暗模式后创建webview组件时遇到了同样的问题。尽管我将Appcompat更新为1.1.0-rc01,但问题仍然存在。上述解决方法解决了这个问题。对于任何将代码放入
Application.oncreate()
的人,请不要像我一样工作,尝试将其放入
Activity.oncreate()
    if (nightMode != AppCompatDelegate.MODE_NIGHT_NO) {
        Log.d(TAG, "Manually instantiating WebView to avoid night mode issue.");
        try {
            new WebView(getApplicationContext());
        } catch (Exception e) {
            Log.e(TAG, "Got exception while trying to instantiate WebView to avoid night mode issue. Ignoring problem.", e);
        }
    }
    AppCompatDelegate.setDefaultNightMode(nightMode);