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>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;
}
});
详细内容见代码:代码链接
后来发现在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;
}
});
详细内容见代码:代码链接
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories