android 平板获取真实宽高(包括状态栏)

来源:互联网 发布:淘宝申请品牌材料 编辑:程序博客网 时间:2024/05/22 07:40

出于目前android平板方面的书籍非常少很多有关android平板与android手机开发之间的区别的文章更是凤毛麟资,本文是对andriod平板新手而写,高手勿喷。

关于android手机屏幕与android平板屏幕尺寸的获取其高度与宽度是有所区别的,没接触过平板的人,在写android手机获取屏幕的大小的时候是不加思索的直接使用display的getheight和getwidth函数,如果软件单纯运用在手机上并没有太大问题,但是如果要兼容到平板的话会出先一个问题,平板的话,利用以上函数获得的长宽是不包括status栏的,也就是说其获得的的实际长宽是可见的不包括状态栏的长宽。往往造成的问题是,如果你在旋转功能的时候,原来的height在旋转后的长度会变长,因为状态栏此时转到了下边,这样如果你还利用旋转前的height的话会发现不是真实的屏幕的长。

又由于android平板随着不同sdk版本的不同,调用getheight所获得的长度是不一致的,具体有和不同请看链接http://blog.csdn.net/zhtsuc/article/details/6691388;

因此针对不同版本写了关于获取平板真实宽高(包括状态栏)的函数,以及获取平板可见区域的宽高(不包括状态栏),从而也可以获得状态栏的高度。

获取真实宽高:

        private int realHeight = 0;
private int realWidth = 0;

  private int screenWidth = 0;
private int screenHeight = 0;

public void getRealScreentData() {
WindowManager w = getWindowManager();


Display d = w.getDefaultDisplay();


DisplayMetrics metrics = new DisplayMetrics();


d.getMetrics(metrics);


realHeight = metrics.heightPixels;
realWidth = metrics.widthPixels;


Log.e("sfa", "Build.VERSION.SDK_INT" + Build.VERSION.SDK_INT);


if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)


try {


realHeight = (Integer) Display.class
.getMethod("getRawHeight").invoke(d);
realWidth = (Integer) Display.class
.getMethod("getRawWidth").invoke(d);
} catch (Exception ignored) {


}


else if (Build.VERSION.SDK_INT >= 17)


try {


android.graphics.Point realSize = new android.graphics.Point();


Display.class.getMethod("getRealSize",
android.graphics.Point.class).invoke(d, realSize);
realHeight = realSize.y;
realWidth = realSize.x;


} catch (Exception ignored) {


}

}

获取可见区域宽高:

public void getVisibleData() {

DisplayMetrics dm = new DisplayMetrics();
dm = this.getApplicationContext().getResources().getDisplayMetrics();

screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;

}


获取状态栏高度: 

public int getStatusHeight() {

return (realHeight  - screenHeight );

}