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

  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(安卓)如何获取keyboard和TP消息 分享
  2. Android(安卓)TV webview禁止自动获取焦点 遥控器按键监听 dispa
  3. android studio 快捷键描述和设置
  4. 知识储备:Android系统架构
  5. android ui界面设计开发demo-智慧社区ui设计展示
  6. Android(安卓)基础总结:(一)Android系统架构
  7. 如何快速启动安卓模拟器(Android(安卓)Emulator)
  8. android关机充电流程及关机充电时的画面显示
  9. 初识Android

随机推荐

  1. Android弹性listview滚动
  2. Android常用布局之LinearLayout(线性布局
  3. Android窗口治理机制
  4. 关于android的animation的xml定义中的and
  5. Android Studio开发环境的搭建
  6. Android嵌入式系统程序开发
  7. android的布局属性(转)
  8. android emulator( android模拟器)
  9. Android中的相对布局
  10. Android Handler机制8之消息的取出与消息