android 平板的action bar、status bar、navigation bar的高度

来源:互联网 发布:2015 库里对火箭 数据 编辑:程序博客网 时间:2024/04/28 16:52

之前开发时一直在用getWidth()、getHeight()方法取屏幕的分辨率,在平板上也这么在用。

后来发现在getHeight()取得的分辨率与 平板中的分辨率不一样。于是进行了一些实验。

平板的分辨率截图:


测试代码得到的log打印输出:


根据以上一些信息基本就可以得到几个bar的大致位置,草图如下:


这样就比较明显了 系统的分辨率 1024 = screentHeight+navigatiobar = 976+48;

也就是说 平时说的最多的screenHeight其实是包含3部分的  statusBar 、actionbar、以及中间的布局部分 layoutHeight 

一些代码片段:

 ScreenHeight:

<span style="white-space:pre"></span>//api13之前    WindowManager windowManager = getWindowManager();    Display display = windowManager.getDefaultDisplay();    screenWidth13 = display.getWidth();    screenHeight13 = display.getHeight(); Log.e("screenWidth13", screenWidth13+"");Log.e("screenHeight13", screenHeight13+"");//api13之后DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);screenWidth = dm.widthPixels;screenHeight = dm.heightPixels;Log.e("screenWidth", screenWidth+"");Log.e("screenHeight", screenHeight+"");

StatusBarHeight:

<span style="white-space:pre"></span>public int getStatusBarHeight() {       int result = 0;      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");      if (resourceId > 0) {          result = getResources().getDimensionPixelSize(resourceId);      }       return result;} 
ActionBarHeight
<span style="white-space:pre"></span>TypedValue tv = new TypedValue();if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)){    actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());}Log.e("actionBarHeight", actionBarHeight+"");
navigationBarHeight:

<span style="white-space:pre"></span>public int getNavigationBarheight(){Resources resources = this.getResources();int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");if (resourceId > 0) {    return resources.getDimensionPixelSize(resourceId);}return 0;}
layoutHeight:

<span style="white-space:pre"></span>final LinearLayout lineLayout  = (LinearLayout)this.findViewById(R.id.layout);ViewTreeObserver vto = lineLayout.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {@Overridepublic boolean onPreDraw() {int layoutWidth = lineLayout.getWidth();int layoutHeight = lineLayout.getHeight();Log.e("layoutWidth",layoutWidth+"");Log.e("layoutHeight",layoutHeight+"");return true;}});


详细内容见代码:代码链接








0 0