晒代码前先了解一下android屏幕区域的划分,如下图(该图引用自此文 )
1、 屏幕区域的获取
-
activity.getWindowManager().getDefaultDisplay();
2、应用区域的获取
-
Rect outRect = new Rect();
-
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
其中,outRect.top 即是状态栏高度。
3、view绘制区域获取
-
Rect outRect = new Rect();
-
activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);
用绘制区域的outRect.top - 应用区域的outRect.top 即是标题栏的高度。
注意: 如果刚启动Activity时就要计算这些数据,最好在 onWindowFocusChanged 函数中进行, 否则得到的某些数据可能是错误的,比如,应用区域高宽的获取。
详细代码如下:
-
public class ScreenSize extends Activity {
-
private TextView mScreenSizeView ;
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_screen_size);
-
mScreenSizeView = (TextView) findViewById(R.id.screen_size);
-
}
-
-
@Override
-
public void onWindowFocusChanged(boolean hasFocus) {
-
super.onWindowFocusChanged(hasFocus);
-
if(hasFocus){
-
System.out.println("second");
-
StringBuilder sb = new StringBuilder();
-
Dimension dimen1 = getAreaOne(this);
-
Dimension dimen2 = getAreaTwo(this);
-
Dimension dimen3 = getAreaThree(this);
-
sb.append("Area one : \n\tWidth: "+dimen1.mWidth + ";\tHeight: "+dimen1.mHeight);
-
sb.append("\nArea two: \n\tWidth: "+dimen2.mWidth + ";\tHeight: "+dimen2.mHeight);
-
sb.append("\nArea three: \n\tWidth: "+dimen3.mWidth + ";\tHeight: "+dimen3.mHeight);
-
mScreenSizeView.setText(sb.toString());
-
}
-
}
-
-
@Override
-
public boolean onCreateOptionsMenu(Menu menu) {
-
getMenuInflater().inflate(R.menu.activity_screen_size, menu);
-
return true;
-
}
-
-
private Dimension getAreaOne(Activity activity){
-
Dimension dimen = new Dimension();
-
Display disp = activity.getWindowManager().getDefaultDisplay();
-
Point outP = new Point();
-
disp.getSize(outP);
-
dimen.mWidth = outP.x ;
-
dimen.mHeight = outP.y;
-
return dimen;
-
}
-
private Dimension getAreaTwo(Activity activity){
-
Dimension dimen = new Dimension();
-
Rect outRect = new Rect();
-
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
-
System.out.println("top:"+outRect.top +" ; left: "+outRect.left) ;
-
dimen.mWidth = outRect.width() ;
-
dimen.mHeight = outRect.height();
-
return dimen;
-
}
-
private Dimension getAreaThree(Activity activity){
-
Dimension dimen = new Dimension();
-
-
Rect outRect = new Rect();
-
activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);
-
dimen.mWidth = outRect.width() ;
-
dimen.mHeight = outRect.height();
-
-
return dimen;
-
}
-
private class Dimension {
-
public int mWidth ;
-
public int mHeight ;
-
public Dimension(){}
-
}