获取系统的高度和宽度android
/** * 获取显示屏幕的高度 * @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; }
获取控件的高度和宽度ide
1)安装布局监听器布局
mView.getViewTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() { @Override public void onGlobalLayout(){ mViewHeight = mView.getHeight(); //OnGlobalLayoutListener可能会被屡次触发,因此注销掉 mView.getViewTreeObserver().removeGlobalOnLayoutListener(this); } });
2)view的UI线程post
mView.post(new Runnable() { @Override public void run() { mViewHeight = mView.getMeasuredWidth()); } } );
3)重写Activity的方法this
@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()