Android 未调用作为CoordinatorLayout的直接子级的BottomNavigationView上的SetOnApplyWindowInsertsListener
这是一个带有BottomNavigationView的非常简单的布局Android 未调用作为CoordinatorLayout的直接子级的BottomNavigationView上的SetOnApplyWindowInsertsListener,android,android-layout,material-design,bottomnavigationview,Android,Android Layout,Material Design,Bottomnavigationview,这是一个带有BottomNavigationView的非常简单的布局 <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+i
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#EEEEEE">
<!--
OUTLINE
<CoordinatorLayout>
<AppbarLayout>
<Toolbar/>
<TabLayout/>
<AppbarLayout >
<ViewPager2/>
<BottomNavigationView/>
</CoordinatorLayout>
-->
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#f00"
android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbar"
android:layout_width="match_parent"
android:layout_height="256dp"
android:background="#ff0"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:contentScrim="@android:color/transparent">
<ImageView
android:id="@+id/ivHeader"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/header"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
android:background="#55ff0000"
android:layout_gravity="top"
android:layout_marginBottom="?attr/actionBarSize" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@android:color/transparent"
app:tabIconTint="#F57C00"
app:tabIndicatorColor="#F57C00"
app:tabIndicatorHeight="4dp"
app:tabMode="scrollable"
app:tabSelectedTextColor="#F5F5F5"
app:tabTextColor="#FFE0B2" />
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:menu="@menu/main" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
通过将rootCoordinatorLayout
作为参数传递给此函数。设置主题为
@颜色/状态\u栏\u颜色
真的
@颜色/导航条颜色
和初始图像,无需设置任何插图
如图所示,工具栏位于状态栏下方,而底部导航视图位于导航栏下方
所以我设置了setonapplywindowinsetsleener
bottomNav.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(bottom = insets.systemWindowInsetBottom)
insets
}
但它没有被调用。因此,我在AppbarLayout、CollasingLayout和ImageView上设置了插图,就像我在android:fitsSystemWindows上所做的那样
appbar.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(top = insets.systemWindowInsetTop)
insets
}
collapsingToolbar.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(top = insets.systemWindowInsetTop)
insets
}
ivHeader.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(top = insets.systemWindowInsetTop)
insets
}
我明白了
红色背景属于AppbarLayout,黄色背景属于CollingToolBarLayout
现在,BottomNavigationView的setOnApplyWindowInsetsListener
被调用,我想是inset被修复了
我的问题是,为什么在没有调用insets forCollasingToolbarLayout的情况下不调用它,以及为什么CollasingToolbarLayout和AppbarLayout之间存在差距?我发现CollasingToolbarLayout有一个bug,它阻止接收insets,如中所述。在
AppBarLayout
上方设置布局可确保其他视图接收插入
但我仍然无法找到如何为问题中的布局正确应用插图/填充
appbar.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(top = insets.systemWindowInsetTop)
insets
}
collapsingToolbar.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(top = insets.systemWindowInsetTop)
insets
}
ivHeader.setOnApplyWindowInsetsListener { view, insets ->
view.updatePadding(top = insets.systemWindowInsetTop)
insets
}