美文网首页Android技术我爱编程
Android另类判断NavigationBar虚拟导航栏状态

Android另类判断NavigationBar虚拟导航栏状态

作者: 孤诣 | 来源:发表于2018-05-25 15:56 被阅读1159次

    好久没码字了,所以出来冒个泡

    一直用着华为的手机,从一开始就觉得华为的虚拟导航栏用着还是挺顺手的,后来发现越来越多的机子都开始使用起来,查看源码发现,虚拟导航栏是属于SystemUI的一部分。

    再一看手机,还提供了隐藏虚拟按键的按钮,于是就想,能不能有一个方法判断导航栏是否显示?基于不重复造轮子的思想,先是网上搜索了一把,方法都大同小异,但一用,发现挺多新手机都无法适配,于是从另一种方向思考如何判断NavigationBar虚拟导航栏是否显示?

    思考:从DecorView这个神View入手,因为考虑到我们码的代码基本都在DecorView中一个id为android.R.id.content的容器中,那好,就根据content的容器宽高判断虚拟导航栏是否显示,于是就有了下面的代码。

    package com.lkuan.gek.util;
    
    import android.content.Context;
    import android.content.res.Configuration;
    import android.graphics.Point;
    import android.graphics.Rect;
    import android.support.annotation.NonNull;
    import android.view.Display;
    import android.view.View;
    import android.view.Window;
    
    /**
     * @author lkuan
     * Create on 2018/5/25
     */
    public class NavigationBarUtil {
    
        /**
         * 判断虚拟导航栏是否显示
         *
         * @param context 上下文对象
         * @param window  当前窗口
         * @return true(显示虚拟导航栏),false(不显示或不支持虚拟导航栏)
         */
        public static boolean checkNavigationBarShow(@NonNull Context context, @NonNull Window window) {
            boolean show;
            Display display = window.getWindowManager().getDefaultDisplay();
            Point point = new Point();
            display.getRealSize(point);
    
            View decorView = window.getDecorView();
            Configuration conf = context.getResources().getConfiguration();
            if (Configuration.ORIENTATION_LANDSCAPE == conf.orientation) {
                View contentView = decorView.findViewById(android.R.id.content);
                show = (point.x != contentView.getWidth());
            } else {
                Rect rect = new Rect();
                decorView.getWindowVisibleDisplayFrame(rect);
                show = (rect.bottom != point.y);
            }
            return show;
        }
    }
    

    经测试,手上大部分手机都能正确得到结果,支持无虚拟按键的判断。

    手机码字挺不容易的
    附上一个民咕噜的表情包娱乐一下_

    Android另类判断NavigationBar虚拟导航栏状态

    相关文章

      网友评论

      本文标题:Android另类判断NavigationBar虚拟导航栏状态

      本文链接:https://www.haomeiwen.com/subject/miqujftx.html