Android 获取虚拟按键的高度

	//获取虚拟按键的高度
    public static int getNavigationBarHeight(Context context) {
        int result = 0;
        if (hasNavBar(context)) {
            Resources res = context.getResources();
            int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");
            if (resourceId > 0) {
                result = res.getDimensionPixelSize(resourceId);
            }
        }
        return result;
    }

    /**
     * 检查是否存在虚拟按键栏
*
     * @param context
* @return
*/
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public static boolean hasNavBar(Context context) {
        Resources res = context.getResources();
        int resourceId = res.getIdentifier("config_showNavigationBar", "bool", "android");
        if (resourceId != 0) {
            boolean hasNav = res.getBoolean(resourceId);
            // check override flag
String sNavBarOverride = getNavBarOverride();
            if ("1".equals(sNavBarOverride)) {
                hasNav = false;
            } else if ("0".equals(sNavBarOverride)) {
                hasNav = true;
            }
            return hasNav;
        } else { // fallback
return !ViewConfiguration.get(context).hasPermanentMenuKey();
        }
    }

    /**
     * 判断虚拟按键栏是否重写
*
     * @return
*/
private static String getNavBarOverride() {
        String sNavBarOverride = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            try {
                Class c = Class.forName("android.os.SystemProperties");
                Method m = c.getDeclaredMethod("get", String.class);
                m.setAccessible(true);
                sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys");
            } catch (Throwable e) {
            }
        }
        return sNavBarOverride;
    }
}
时间: 2024-08-05 07:03:18

Android 获取虚拟按键的高度的相关文章

Android获取虚拟软键盘高度

1 public static int getDpi(Context context) { 2 int dpi = 0; 3 WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 4 Display display = windowManager.getDefaultDisplay(); 5 DisplayMetrics displayMetrics = ne

获取虚拟按键、状态栏等高度;

/获取屏幕原始尺寸高度,包括虚拟功能键高度 public static int getDpi(Context context){ int dpi = 0; WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); DisplayMetrics displayM

Android隐藏虚拟按键,关闭开机动画、开机声音

/*********************************************************************** * Android隐藏虚拟按键,关闭开机动画.开机声音 * 声明: * 有时候,我们可能会希望隐藏掉android中的虚拟按键,当然,那个 * Android的开机动画,有时候也是挺讨人厌的,也是可以隐藏的. * * 2016-1-7 深圳 南山平山村 曾剑锋 **********************************************

android——隐藏虚拟按键

只能暂时的隐藏点击屏幕就出来了: layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Android获取窗口可视区域大小: getWindowVisibleDisplayFrame()

getWindowVisibleDisplayFrame()方法 getWindowVisibleDisplayFrame()是View类下的一个方法,从方法的名字就可以看出,它是用来获取当前窗口可视区域大小的.就是contentParentView +actionbar的高度 此方法的原型为 public void getWindowVisibleDisplayFrame(Rect outRect); 1 它接受一个Rect对象作为参数,执行过程中会根据当前窗口可视区域大小更新outRect的

UWP 判断windows mobile是使用的实体键还是虚拟按键

最近在写启动屏幕,发现虚拟按钮会挡住,启动屏幕的最下面的元素,大概有50 px.可是有什么办法知道手机是用的实体键还是虚拟按键吗? 如下图.可以看到红色的部分显示了一点点.代码里设置的是60px. 在网上查找了很久.都没发现有任何查看的api.瞬间在心里开始骂ms了.. 各种论坛各种询问. 最后有一个机油回答到 试了一试..嗯..虚拟按键全屏的时候会消失掉..可是..这不我想要的啊.. 突然间灵光一闪..想起有这样一种东西.ApplicationView.GetForCurrentView().

Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键

一般的获取屏幕尺寸,但是不包括虚拟功能高度 /** * 获取屏幕尺寸,但是不包括虚拟功能高度 * * @return */ public int getNoHasVirtualKey() { int height = getWindowManager().getDefaultDisplay().getHeight(); return height; } 但是今天我们测试找我就说你的webview界面有问题呀下面怎么一块空白,我看看就发现空白的手机是华为的有软键盘的那种 我们这个方法获取的高度不包

Android应用:StatusBar状态栏、NavigationBar虚拟按键栏、ActionBar标题栏、Window屏幕内容区域等的宽高

一.屏幕中各种栏目以及屏幕的尺寸 当我们需要计算屏幕中一些元素的高度时,或许需要先获取到屏幕或者各种栏目的高度,下面这个类包含了Status bar状态栏,Navigation bar虚拟按键栏,Action bar标题栏, Window屏幕内容等的宽高的计算,可以带来极大的方便. 因为我在代码中做了比较详尽的注释,在这里不再多阐述,以下是代码: 1 /** 2 * 这个类描述了当前设备的配置中system bar的尺寸(StatusBar状态栏,NavigationBar虚拟按键栏,Actio

android 虚拟按键是通过哪种机制上报的?

1.在normal mode下,tp button也是和其他触摸事件一样,以坐标形式的input_event进行上报.在初始化时会通过tpd_button_setting()函数依据定义在tpd_custom_XXX.h文件里的配置信息将虚拟按键的坐标信息写在/sys/board_properties/virtualkeys.mtk-tpd中. 工作时.tp driver将按下的点的坐标进行上报.Android上层会读取sys中的按键配置信息.再推断上报的坐标是否属于某个按键的坐标范围,以此将坐