findViewById(android.R.id.statusBarBackground)和findViewById(android.R.id.navigationBarBackground)返回null?

时间:2018-03-28 11:47:52

标签: android view statusbar navigationbar findviewbyid

我试过NougatOreo。这两款手机都是机器人,两种视图都可以在屏幕上显示。我的sharedElementTransition需要这些观看次数。在here之前已经提出了这个问题,但没有回答。这种情况发生在很多人身上,他们在Alex Lockwood的回答评论中讨论here,但没有明确的解决方案。

我从我的活动中调用了findViewById()并尝试了两个

findViewById(android.R.id.statusBarBackground);

getWindow().getDecorView().findViewById(android.R.id.statusBarBackground);

我在findViewById()

之后调用了setContentView()

Possibly related,但与progressBar不同,statusBarnavigationBar视图几乎始终存在。

代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
        getWindow().setSharedElementEnterTransition(getTransitionSet());
        getWindow().setSharedElementExitTransition(getTransitionSet());
        getWindow().setSharedElementReturnTransition(getTransitionSet());
        getWindow().setSharedElementReenterTransition(getTransitionSet());
        ActivityCompat.postponeEnterTransition(this);
        setEnterSharedElementCallback(mCallback);
    }
    setContentView(R.layout.summary_image_preview);
    navigationBar = getWindow().getDecorView().findViewById(android.R.id.navigationBarBackground);
    statusBar = getWindow().getDecorView().findViewById(android.R.id.statusBarBackground);
    mToolbar = (Toolbar) findViewById(R.id.toolBar);
    // etc...

}

Toolbar是我的内容视图中的普通视图,它工作正常。但是statusBarnavigationBar are null

1 个答案:

答案 0 :(得分:0)

ViewsonCreate()函数中返回null。我在Views的{​​{1}}内检查了相同的Fragment,但它们并非空。我通过延迟onViewCreated()来解决问题,直到我需要它为止。

对于某些reasor,虽然findViewById()中提供了其他视图,但只有在onCreate()创建后才能访问应用程序之外的视图