获取系统的高度和宽度
/** * 获取显示屏幕的高度 * @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的方法
@Overridepublic 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()