在Android 11(API level 30)及以上版本中,获取systemBars的Insets会遇到一些问题。这是由于Android 11中引入了状态栏和导航栏的行为变化,例如状态栏将不再被显示。解决这个问题的一种方法是使用WindowInsetsCompat类而非原始的WindowInsets类来获取Insets。我们可以在布局中使用OnApplyWindowInsetsListener和ViewCompat.setOnApplyWindowInsetsListener()方法来获取WindowInsetsCompat对象,并通过它来获取systemBars insets。以下是示例代码:
ViewCompat.setOnApplyWindowInsetsListener(view, new OnApplyWindowInsetsListener() {
@Override
public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {
// Get systemBars Insets from WindowInsetsCompat object
Insets systemBarsInsets = insets.getInsets(
WindowInsetsCompat.Type.systemBars());
// Do something with systemBarsInsets
return insets;
}
});
通过使用WindowInsetsCompat类可以更轻松地获取systemBars Insets,且兼容Android 11以前的版本。