先上几张图:
图一:状态栏 图二:标题栏 图三:内容区域
图四:整个屏幕区域 图五:标题加内容区
整个Activity加载时可分为以下几层:
第一层是DecorView(继承FrameLayout),整个屏幕(包括状态栏,标题栏以及剩余部分)
由系统创建.类路径:com.android.internal.policy.impl.PhoneWindow$DecorView
第二层LinearLayout,布局中包括两个Framelayout.第一个布局用于显示标题栏,第二个FrameLayout布局中显示就是我们自定义的布局文件
那么开始讲解这五个图,DecorView即图四中红线圈的部分(以下简称图四)
获取方式:
DecorView view=getWindow().getDecorView();
int width = view.getWidth();
int height = view.getHeight();
与下面方式获取的宽高是一样的
int width = getWindowManager().getDefaultDisplay().getWidth();
int height = getWindowManager().getDefaultDisplay().getHeight();
图五画红线部分(以下简称图五),获取方式:
Rect outRect = new Rect();
View view = getWindow().getDecorView();
view.getWindowVisibleDisplayFrame(outRect);
int width = outRect.width();
int height = outRect.height();
图三画红线部分(以下简称图三),获取方式:
View view2 = getWindow().findViewById(Window.ID_ANDROID_CONTENT);
int width = view2.getWidth();
int height = view2.getHeight();
如此一来,图一和图二的宽和高就可以依据图三,图四,图五的宽和高加减法即可求得。