今天遇到一个问题,我做出来的效果和设计师给的标注总是差几个像素,有个差1个像素,有的差5个像素,调了好久,就是不知道为啥,后来我静下心来好好想了想,计算了一下我的各个高度,我发现问题的所在了:
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int widthPixels = dm.widthPixels; int heightPixels = dm.heightPixels;
我们用这种方式获取到的屏幕高度是包括: 状态栏(显示电池信息的那一栏)。而我们应用显示内容的话,这部分是不能显示内容的,但是我又算上了,所以总是差点,原因就在这里。
Rect rect = new Rect(); Window win = TestStatusActivity.this.getWindow(); win.getDecorView().getWindowVisibleDisplayFrame(rect); int statusBarHeight = rect.top; int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop(); int titleBarHeight = contentViewTop - statusBarHeight; System.out.println(statusBarHeight + ", " + titleBarHeight);
用这种方式得到了状态栏的高度和标题栏的高度。