Sur certains appareils tels que Samsung S8, la barre de navigation peut être masquée ou affichée, c’est une question qui se pose. La barre de navigation de Samsung S8 peut être masquée ou affichée en cliquant sur le bouton inférieur gauche
Je n'ai pas trouvé de manière directe de déterminer même si le code de source Android.
Et je google certains problèmes, tels que Une bonne solution pour vérifier la barre de navigation , mais cela n’aide en rien.
Toute aide est très appréciée.
Pour les téléphones Samsung (S8, S9, etc.), vous pouvez détecter si la barre de navigation s'affiche en écoutant un événement Samsung.
private static final String SAMSUNG_NAVIGATION_EVENT = "navigationbar_hide_bar_enabled";
Ensuite, écoutez cet événement et faites ce que vous voulez:
private void checkNavigationBar() {
if (isSamsungVersionNougat()) { // check if Samsung phones
// detect navigation bar
try {
// there are navigation bar
if (Settings.Global.getInt(activity.getContentResolver(), SAMSUNG_NAVIGATION_EVENT) == 0) {
// Your code
// example: galleryViewModel.navigationBarHeight.set(getNavigationBarHeight());
} else { // there are no navigation bar
// Your code
// example: galleryViewModel.navigationBarHeight.set(0);
}
} catch (Exception ignored) {
}
barHideEnableObserver = new BarHideEnableObserver(new Handler());
activity.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(SAMSUNG_NAVIGATION_EVENT),
true, barHideEnableObserver);
} else {
galleryViewModel.navigationBarHeight.set(getNavigationBarHeight());
}
}
Utilisez cette méthode, a travaillé pour moi. Assurez-vous que la vue a d'abord été rendue pour vous assurer que getHeight () ne renvoie pas 0. Assurez-vous également que le rootView que vous utilisez est censé occuper tout l'écran.
public static boolean hasNavBar (Activity activity, View rootView) {
if (activity == null || rootView == null)
return true;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1)
return true;
Display d = activity.getWindowManager().getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
int viewHeight = rootView.getHeight();
if (viewHeight == 0)
return true;
int realHeight = realDisplayMetrics.heightPixels;
return realHeight != viewHeight;
}