在三星S8等一些设备上,导航栏可以隐藏或显示,这在某些情况下是个问题。
Samsung S8's navigation bar can be hide or show by click left bottom button
即使在android源代码中,我也没有找到直接的方法来确定。
我搜索了一些问题,比如A good solution to check for navigation bar,但是没有帮助。
任何帮助都非常感谢。

最佳答案

对于三星手机(即S8、S9等),您可以通过收听三星事件来检测导航栏是否显示。

private static final String SAMSUNG_NAVIGATION_EVENT = "navigationbar_hide_bar_enabled";

那就听听这件事,做你该做的事:
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());
    }
}

07-24 20:57