android 监听导航栏的显示与隐藏

 

 /**
     * 虚拟导航栏显示、隐藏监听
     * 该方法只有在导航栏发生变化时才会触发
     */
    public static void onNavigationBarChanged(Activity activity, OnNavigationStateListener onNavigationStateListener) {
        int height = getNavigationBarHeight(activity);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
            ViewCompat.setOnApplyWindowInsetsListener(activity.getWindow().getDecorView(), new OnApplyWindowInsetsListener() {
                @Override
                public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {
                    boolean isShowing = false;
                    int naviHeight = 0;
                    if (insets != null) {
                        naviHeight = insets.getSystemWindowInsetBottom();
                        isShowing = naviHeight == height;
                    }
                    if (onNavigationStateListener != null && naviHeight <= height) {
                        Log.d("debug", "导航栏是否显示:" + isShowing);
                        onNavigationStateListener.onNavigationState(isShowing, naviHeight);
                    }
                    if (insets != null) {
                        return ViewCompat.onApplyWindowInsets(v, insets);
                    }
                    return null;
                }
            });
        }
    }

    public static int getNavigationBarHeight(Activity activity) {
        Resources resources = activity.getResources();
        int resourceId = resources.getIdentifier("navigation_bar_height",
                "dimen", "android");
        //获取NavigationBar的高度
        int height = resources.getDimensionPixelSize(resourceId);
        Log.d("debug", "navigationBarHeight=" + height);
        return height;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值