android检测三星Galaxy S8导航栏以编程方式隐藏或显示

时间:2017-09-08 01:53:16

标签: android android-navigation-bar

在某些设备上,例如三星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,但它没有帮助。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

对于Samsung手机(例如S8,S9等),您可以通过侦听Samsung事件来检测导航栏是否在显示。

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());
    }
}

答案 1 :(得分:0)

使用此方法,为我工作。确保首先渲染视图以确保getHeight()不返回0.还要确保您使用的rootView意图占用整个屏幕。

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;
}