软件编程
位置:首页>> 软件编程>> Android编程>> Android开发之判断有无虚拟按键(导航栏)的实例

Android开发之判断有无虚拟按键(导航栏)的实例

作者:尒洏強汏  发布时间:2023-01-29 07:48:45 

标签:Android,判断,虚拟,按键,导航栏

判断有无虚拟按键(导航栏)

现在很大一部分手机没有虚拟按键,一部分有。我们在做适配的时候可能会用到这方面的知识。

例如:屏幕填充整个屏幕的时候,没办法只能连导航栏一起填充了,但是这个不是我们想要的,我们要给布局试着paddingbottom,这个时候我们就要判断有么有导航栏,导航栏高度是多少了。


/**
 * 获取是否存在NavigationBar
 * @param context
 * @return
 */
public 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;
}
/**
 * 获取虚拟功能键高度
 * @param context
 * @return
 */
public int getVirtualBarHeigh(Context context) {
 int vh = 0;
 WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
 Display display = windowManager.getDefaultDisplay();
 DisplayMetrics dm = new DisplayMetrics();
 try {
  @SuppressWarnings("rawtypes")
  Class c = Class.forName("android.view.Display");
  @SuppressWarnings("unchecked")
  Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
  method.invoke(display, dm);
  vh = dm.heightPixels - windowManager.getDefaultDisplay().getHeight();
 } catch (Exception e) {
  e.printStackTrace();
 }
 return vh;
}

来源:http://blog.csdn.net/z_x_qiang/article/details/75911755

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com