下面方法可判断手机是否有虚拟按键功能:

  public boolean hasNavigationBarFun(Activity activity) {        Resources rs = activity.getResources();        int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");        boolean hasNavBarFun = false;        if (id > 0) {            hasNavBarFun = rs.getBoolean(id);        }        try {            Class systemPropertiesClass = Class.forName("android.os.SystemProperties");            Method m = systemPropertiesClass.getMethod("get", String.class);            String navBarOverride = (String)m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");            if ("1".equals(navBarOverride)) {                hasNavBarFun = false;            } else if ("0".equals(navBarOverride)) {                hasNavBarFun = true;            }        } catch (Exception e) {            hasNavBarFun = false;        }        return hasNavBarFun;    }

检查在有虚拟按键的设备上面,虚拟按键是否展示出来(收起或展示)

public boolean isNavigationBarShow(Activity activity){        DisplayMetrics dm = new DisplayMetrics();        Display display = activity.getWindowManager().getDefaultDisplay();        display.getMetrics(dm);        int screenHeight = dm.heightPixels;        DisplayMetrics realDisplayMetrics = new DisplayMetrics();        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {            display.getRealMetrics(realDisplayMetrics);        } else {            Class c;            try {                c = Class.forName("android.view.Display");                Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);                method.invoke(display, realDisplayMetrics);            } catch (Exception e) {                realDisplayMetrics.setToDefaults();                e.printStackTrace();            }        }        int screenRealHeight = realDisplayMetrics.heightPixels;        return (screenRealHeight - screenHeight) > 0; }

而要监听虚拟按键的展示收起和展示,可以在需要监听的页面为最外面的View在onResume()时添加mContainer.getViewTreeObserver().addOnGlobalLayoutListener(this);
在onPause()时 移除mContainer.getViewTreeObserver().removeGlobalOnLayoutListener(this);
在onGlobalLayout() 中调用checkDeviceHasNavigationBar来检查从而进行判断。

更多相关文章

  1. Android TV webview禁止自动获取焦点 遥控器按键监听 dispatchKe
  2. android 虚拟按键源码流程分析
  3. Android 如何在屏幕切换的时候页面信息不被重置
  4. android UI设计,android ui开发,android 页面设计,android页面布
  5. android中实现swipe的手势功能及页面拖动动画
  6. Android基本操作1(意图使用、界面转换、按键操作、文本传递)
  7. android中java与js通信(可以用html来做页面,进行交互)
  8. Android页面去掉标题全屏的方法-第一次用安卓试试看
  9. android 项目中接入flutter模块(部分页面)

随机推荐

  1. SameText
  2. 哪个企业网盘可以实现dwg在线预览?
  3. docker搭建mongodb分片集群
  4. 如何在定义局部变量时赋初始值
  5. 动态数组传递数据示例 - 回复 YinGaGa 的
  6. 生产环境ERROR日志治理总结
  7. 关于 class helper for ... 语法
  8. 简体中文与繁体中文的转换函数
  9. 测试字符串写入类: TStringWriter
  10. 测试字符串读取类: TStringReader