您的位置:首页 > 移动开发 > Android开发

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

2015-12-28 16:02 369 查看
之前开发时一直在用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() {

@Override
public boolean onPreDraw() {

int layoutWidth = lineLayout.getWidth();
int layoutHeight = lineLayout.getHeight();

Log.e("layoutWidth",layoutWidth+"");
Log.e("layoutHeight",layoutHeight+"");
return true;
}
});

详细内容见代码:代码链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 平板 height