这是我观察到的;换句话说,您的体验可能会有所不同。
[Layout for Activity]
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" <--
tools:context=".MyAppActivity">
...
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
注意android:fitsSystemWindows="true"
最外面的布局。只要我们有它,setOnApplyWindowInsetsListener()
就会被调用。
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
ViewCompat.setOnApplyWindowInsetsListener(fab) { view, insets ->
...
insets
}
}
或者,如果您想要“全屏”,这意味着您希望您的布局扩展到状态栏和导航栏,您可以执行以下操作。
override fun onCreate(savedInstanceState: Bundle?) {
...
WindowCompat.setDecorFitsSystemWindows(window, false) <--
ViewCompat.setOnApplyWindowInsetsListener(fab) { view, insets ->
...
insets
}
}
当您使用 Fragment 时,同样的想法也适用,只要 Activity(包含 Fragment)fitsSystemWindows
位于最外层布局中,或者您将 Activity 设置为全屏。