Android判斷手機時候有導航欄的方法
參考: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
1.
//獲取螢幕尺寸,不包括虛擬功能高度<br><br>
getWindowManager().getDefaultDisplay().getHeight();
2.
獲取螢幕原始尺寸高度,包括虛擬功能鍵高度,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
private
int getDpi()
{ int
dpi = 0 ;
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new
DisplayMetrics();
@SuppressWarnings ( "rawtypes" )
Class c;
try {
c = Class.forName( "android.view.Display" );
@SuppressWarnings ( "unchecked" )
Method method = c.getMethod( "getRealMetrics" ,DisplayMetrics. class );
method.invoke(display, dm);
dpi=dm.heightPixels;
} catch (Exception e){
e.printStackTrace();
}
return dpi;
}
|
還看到一個方法跟以上類似:
/**
* 判斷底部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;
}