android navigation bar高度,获取Android底部导航栏高度NavigationBar

public class NavigationBarInfo {

private static final String TAG = "NavigationBarInfo";

//获取虚拟按键的高度

private 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;

}

/**

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

*/

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)

private 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);

String sNavBarOverride = getNavBarOverride();

if ("1".equals(sNavBarOverride)) {

hasNav = false;

} else if ("0".equals(sNavBarOverride)) {

hasNav = true;

}

return hasNav;

} else {

return !ViewConfiguration.get(context).hasPermanentMenuKey();

}

}

/**

* 判断虚拟按键栏是否重写

*/

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 (Exception e) {

Logger.e(TAG, e.toString());

}

}

return sNavBarOverride;

}

public static void adaptiveStartPage(Activity activity, ImageView imageView, boolean bottom) {

DisplayMetrics dm = activity.getResources().getDisplayMetrics();

float height = dm.heightPixels + NavigationBarInfo.getNavigationBarHeight(activity);

// float height = dm.heightPixels ;

float width = dm.widthPixels;

float standard = (float) (1920.0 / 1080.0);

float actual = height / width;

Logger.d(TAG, "heigth = " + height);

Logger.d(TAG, "standard = " + standard);

Logger.d(TAG, "actual = " + actual);

Logger.d(TAG, "actual/standard = " + actual / standard);

Logger.d(TAG, "standard/actual = " + standard / actual);

Logger.d(TAG, "getNavigationBarHeight = " + NavigationBarInfo.getNavigationBarHeight(activity));

Logger.d(TAG, "hasNavBar = " + NavigationBarInfo.hasNavBar(activity));

//以宽为参考

if (actual > standard) {

imageView.setScaleY(actual / standard);

imageView.setScaleX(actual / standard);

} else if (actual < standard) {

imageView.setScaleY(standard / actual);

imageView.setScaleX(standard / actual);

}

}

public static void hideNavigationBar(Activity activity) {

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

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

v.setSystemUiVisibility(View.GONE);

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

View decorView = activity.getWindow().getDecorView();

int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;

decorView.setSystemUiVisibility(uiOptions);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值