出于目前android平板方面的书籍非常少很多有关android平板与android手机开发之间的区别的文章更是凤毛麟资,本文是对andriod平板新手而写,高手勿喷。
关于android手机屏幕与android平板屏幕尺寸的获取其高度与宽度是有所区别的,没接触过平板的人,在写android手机获取屏幕的大小的时候是不加思索的直接使用display的getheight和getwidth函数,如果软件单纯运用在手机上并没有太大问题,但是如果要兼容到平板的话会出先一个问题,平板的话,利用以上函数获得的长宽是不包括status栏的,也就是说其获得的的实际长宽是可见的不包括状态栏的长宽。往往造成的问题是,如果你在旋转功能的时候,原来的height在旋转后的长度会变长,因为状态栏此时转到了下边,这样如果你还利用旋转前的height的话会发现不是真实的屏幕的长。
又由于android平板随着不同sdk版本的不同,调用getheight所获得的长度是不一致的,具体有和不同请看链接http://blog.youkuaiyun.com/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 );
}