Android学习笔记之屏幕宽高、状态栏宽高、标题宽高以及left()、top()、right()、bottom()
前言:
想学号安卓,这几个方法及属性你不得不学会怎么获取,当你学会了如何获取屏幕宽高、状态栏宽高、标题栏宽高以及子控件与父控件的left()、top()、right()、bottom()等,这会对你学习自定义控件会有很大的帮助,我之前做自定义的时候有时候也很难弄清他们之间的区别,今天有必要把这些知识点总结起来跟大家一起分享分享,让自己在今后的学习中不在为这些方法感到苦恼。
首先要了解的是安卓的屏幕分布区域(这里我采用的是1080 * 1920的屏幕),如下图所示:
通过上图我们就可以知道手机屏幕主要的三个区域了,下面我们开始使用代码来获取这三个区域的宽高度。
这里需要注意一下,这里我们所测的高度并不是1920,因为最底下有一个模拟的虚拟按钮占据了一定的空间高度,所以具体的高度,会根据手机的具体情况获取。
为什么我有时候在使用getLeft(), getRight(), getTop(), getBottom()它们得到的结果是0?
出现这种情况可能是在刚启动程序,程序刚开始绘制 view 的时候,你马上使用代码去捕获上面的值。这个时候,由于view 是刚开始绘制的,你得到的就会是 0,所以,这里我们所有的测试都放在点击事件里面来进行。
- 获取整个屏幕的宽度:
可以通过一下5中形式获取整个屏幕的宽高度
/**
* 获取屏幕的总宽度
* 采用5中方法
*/
public void getTotalScreenWidthAndHeight() {
//方法1
WindowManager manager1 = getWindowManager();
Display display = manager1.getDefaultDisplay();
Point point = new Point();
display.getSize(point);
Log.d(TAG, "getTotalScreenWidth: width = " + point.x);
Log.d(TAG, "getTotalScreenWidth: height = " + point.y);
//方法2
WindowManager manager2 = (WindowManager) getSystemService(WINDOW_SERVICE);
int width = manager2.getDefaultDisplay().getWidth();
int height = manager2.getDefaultDisplay().getHeight();
Log.d(TAG, "getTotalScreenWidth: width = " + width);
Log.d(TAG, "getTotalScreenWidth: height = " + height);
//方法3
WindowManager manager3 = getWindowManager();
int width1 = manager3.getDefaultDisplay().getWidth();
int height1 = manager3.getDefaultDisplay().getHeight();
Log.d(TAG, "getTotalScreenWidth: width = " + width1);
Log.d(TAG, "getTotalScreenWidth: height = " + height1);
//方法4
WindowManager manager4 = this.getWindowManager();
DisplayMetrics outMetrics = new DisplayMetrics();
manager4.getDefaultDisplay().getMetrics(outMetrics);
int width2 = outMetrics.widthPixels;
int height2 = outMetrics.heightPixels;
Log.d(TAG,