您的位置:首页 > 其它

Andorid 判断手机是否有下方导航栏(NavigationBar)的几种方法

2017-03-17 15:18 531 查看
参考:https://zhidao.baidu.com/question/1241728811608853219.html

            https://segmentfault.com/q/1010000004387583
            http://www.cnblogs.com/huxdiy/p/3977232.html
            http://tieba.baidu.com/p/3690819624
第一种:判断手机是否有物理按键,有就没有导航栏,反之就有(这个有点问题,逻辑不严谨,4.0以上所有手机都可以显示NavigationBar,只是手机厂家屏蔽了)。


public static boolean checkDeviceHasNavigationBar(Context activity) {
//通过判断设备是否有返回键、菜单键(不是虚拟键,是手机屏幕外的按键)来确定是否有navigation bar
boolean hasMenuKey = ViewConfiguration.get(activity)
.hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap
.deviceHasKey(KeyEvent.KEYCODE_BACK);

if (!hasMenuKey && !hasBackKey) {
// 做任何自己需要做的,这个设备有一个导航栏
return true;
}
return false;
}


第二种:获取手机是否允许使用(显示)NavigationBar

//获取是否存在NavigationBar
public static boolean checkDeviceHasNavigationBar(Context context) {
boolean hasNavigationBar = false;
Resources rs = context.getResources();
int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
if (id > 0) {
hasNavigationBar = 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)) {
hasNavigationBar = false;
} else if ("0".equals(navBarOverride)) {
hasNavigationBar = true;
}
} catch (Exception e) {

}
return hasNavigationBar;

}


第三种:通过获取不同状态的屏幕高度对比判断是否有NavigationBar




2.

获取屏幕原始尺寸高度,包括虚拟功能键高度,

用“2”中的高度减去“1”中的高度如果大于0就存在NavigationBar,反之不存在。

还看到一个方法跟以上类似:

/**

* 判断底部navigator是否已经显示

*
@param windowManager

* @return

*/

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)

private boolean hasSoftKeys(WindowManager windowManager){

Display d = windowManager.getDefaultDisplay();

DisplayMetrics realDisplayMetrics = new DisplayMetrics();

d.getRealMetrics(realDisplayMetrics);

int realHeight = realDisplayMetrics.heightPixels;

int realWidth = realDisplayMetrics.widthPixels;

DisplayMetrics displayMetrics = new DisplayMetrics();

d.getMetrics(displayMetrics);

int displayHeight = displayMetrics.heightPixels;

int displayWidth = displayMetrics.widthPixels;

return (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: