获取系统的高度和宽度
/**
* 获取显示屏幕的高度
* @return
*/
private int getScreenHeight() {
WindowManager windowManager = mainActivity.getWindowManager();
Display display = windowManager.getDefaultDisplay();
Point point = new Point();
display.getSize(point);
int SCREEN_WIDTH = point.x;
int SCREEN_HEIGHT = point.y;
// 或者
DisplayMetrics dm = new DisplayMetrics();
display.getMetrics(dm);
int SCREEN_WIDTH = dm.widthPixels;
int SCREEN_HEIGHT = dm.heightPixels;
return SCREEN_HEIGHT;
}
/**
* 获取顶部status bar高度
* @return
*/
private int getStatusBarHeight() {
Resources resources = mContext.getResources();
int resourceId = resources.getIdentifier("status_bar_height", "dimen","android");
int height = resources.getDimensionPixelSize(resourceId);
return height;
}
/**
* 获取底部 navigation bar 高度
* @return
*/
private int getNavigationBarHeight() {
Resources resources = mActivity.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");
int height = resources.getDimensionPixelSize(resourceId);
return height;
}
获取控件的高度和宽度
1)安装布局监听器
mView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout(){
mViewHeight = mView.getHeight();
//OnGlobalLayoutListener可能会被多次触发,所以注销掉
mView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
2)view的UI线程
mView.post(new Runnable() {
@Override
public void run() {
mViewHeight = mView.getMeasuredWidth());
}
}
);
3)重写Activity的方法
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
int[] location = new int[2];
mView.getLocationOnScreen(location);
mViewHeight = location[1];
}
系统调用顺序为
Activity.oncreate()→Activity.onResume()→
→TestImageView.onMeasure()→TestImageView.onLayout()→onGlobalLayoutListener()→
→Activity.onWidnowFocusChanged()→.....→
→TextImageView.onDraw()