systemWindowInsetBottom始终为零



我将setOnApplyWindowInsetsListener设置为应用程序的根视图,并获取导航栏更改的更新,但inset.systemWindowInsetBottom始终为0

override fun onStart() {
super.onStart()
layoutMain?.setOnApplyWindowInsetsListener { v, insets ->
layoutMain.updatePadding(bottom = insets.systemWindowInsetBottom)
insets
}
}

布局主是 MaincActivity 中的约束布局和根视图组

<androidx.constraintlayout.widget.ConstraintLayout 
android:id="@+id/layoutMain"
android:fitsSystemWindows="true" ... >

在更多事情上,我使用以下标志:

window.addFlags(FLAG_LAYOUT_NO_LIMITS)

[使用以下教程:] 也是我对同一问题的另一个问题

创建示例项目并按照您的参考教程进行操作后,我发现了以下内容。

我发现了一些获得值systemWindowInsetBottom为零的原因。

  1. 该值取决于bottomNavigation。如果您的系统后退按钮(软层(与bottomNavigation重叠或您的bottomNavigation完全隐藏,那么您将获得正确的值systemWindowInsetBottom

  2. 但是,如果您的bottomNavigation从系统软底层(后退按钮,主页按钮等(可见且以上,那么您将得到0。

下面的示例显示了我们何时可以得到零以及何时可以获得实际值。

如果添加此行,您将获得一些值,因为底部导航不可见mBinding.getRoot().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);

但是,如果您删除该行或添加此行,您将始终为零。mBinding.getRoot().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

所以 vaue 取决于底部导航可见性状态

private ActivityMainBinding mBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
mBinding.getRoot().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
if (navHostFragment != null) {
NavigationUI.setupWithNavController(mBinding.bottomNavigation, navHostFragment.getNavController());
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
mBinding.mainLayout.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
Log.d("BottomTest", "padding: " + insets.getSystemWindowInsetBottom());
return insets;
}
});
}
}

从视图的源代码中,我们知道只有你设置了可以影响系统UI布局的标志(SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION或SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN(,你才能得到实际值。

相关内容

  • 没有找到相关文章

最新更新