Use ViewCompat to get window insets on Android 5.0+.

On devices running API 20 and below, getRootWindowInsets() always returns null.
This commit is contained in:
Nicholas 2022-09-20 12:13:54 -04:00 committed by Cody Henthorne
parent 7451ee1403
commit a98cc5706f

View file

@ -39,6 +39,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
import androidx.lifecycle.Lifecycle;
@ -326,6 +328,10 @@ public final class ViewUtil {
}
public static int getStatusBarHeight(@NonNull View view) {
final WindowInsetsCompat rootWindowInsets = ViewCompat.getRootWindowInsets(view);
if (rootWindowInsets != null) {
return rootWindowInsets.getInsets(WindowInsetsCompat.Type.statusBars()).top;
} else {
int result = 0;
int resourceId = view.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
@ -333,8 +339,13 @@ public final class ViewUtil {
}
return result;
}
}
public static int getNavigationBarHeight(@NonNull View view) {
final WindowInsetsCompat rootWindowInsets = ViewCompat.getRootWindowInsets(view);
if (rootWindowInsets != null) {
return rootWindowInsets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom;
} else {
int result = 0;
int resourceId = view.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
@ -342,6 +353,7 @@ public final class ViewUtil {
}
return result;
}
}
public static void hideKeyboard(@NonNull Context context, @NonNull View view) {
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);