Android实现隐藏手机底部虚拟按键

现在的手机比较流行底部带虚拟按键,比如华为、nexus,一般情况下对开发一个APP没啥影响,但是不一般情况下就会有影响的,比如全屏录像功能,

用简单的方法直接获取camera支持的手机屏幕分辨率然后用SurfaceView全屏渲染出来,这时由于底部虚拟按键占用了一定的高度的屏幕空间,这时图像会被压缩,

特别是拍头像时会很明显,如图:

接下来加上几个方法就OK 了,代码如下

/**

* 隐藏虚拟按键,并且全屏

*/

protected void hideBottomUIMenu(){

//隐藏虚拟按键,并且全屏

if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api

View v = this.getWindow().getDecorView();

v.setSystemUiVisibility(View.GONE);

} else if (Build.VERSION.SDK_INT >= 19) {

//for new api versions.

View decorView = getWindow().getDecorView();

int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE

| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar

// | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar

| View.SYSTEM_UI_FLAG_IMMERSIVE;

decorView.setSystemUiVisibility(uiOptions);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

}

}

检查是否存在虚拟按键栏

/**

* 检查是否存在虚拟按键栏

* @param context

* @return

*/

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;

}

hideBottomUIMenu() 在onCreate()里面调用就可以了,之后的效果,底部虚拟按键也成为了SurfaceView的一部分,不仅仅只是透明了哦,如图:

当然以上代码不一定只能用于录像,相关功能需求都可以使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 Android实现隐藏手机底部虚拟按键 的全部内容, 来源链接: utcz.com/p/241155.html

回到顶部