📅  最后修改于: 2023-12-03 15:13:21.807000             🧑  作者: Mango
在 Android 应用开发中,获取屏幕宽度和高度是一个非常基础的操作,用于适配不同屏幕的布局和样式。
可以通过 Context 获取屏幕的宽度和高度。其中,Context 可以是 Activity、Fragment、Service 等 Android 类中的子类。
// 获取默认 DisplayMetrics 对象
DisplayMetrics dm = getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;
可以使用 getResources()
方法获取到 Context 的 Resources 对象,然后再通过 getDisplayMetrics()
方法获取默认的 DisplayMetrics 对象。获取到 DisplayMetrics 对象后,可以通过 widthPixels
和 heightPixels
分别获取屏幕的宽度和高度。
注意:获取到的屏幕宽度和高度不包括导航栏和状态栏的高度。
可以通过 Window 获取屏幕的宽度和高度。其中,Window 可以是 Activity 的 Window 对象。
// 获取当前 activity 的 window
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenWidth = size.x;
int screenHeight = size.y;
可以使用 getWindowManager()
方法获取到 WindowManager 对象,然后再通过 getDefaultDisplay()
方法获取到 Display 对象。获取到 Display 对象后,可以通过 getSize()
方法获取 Point 对象,然后可以通过 Point 对象的 x
和 y
属性获取到屏幕的宽度和高度。
注意:获取到的屏幕宽度和高度不包括导航栏和状态栏的高度。
获取导航栏和状态栏的高度必须使用 Window 对象。
获取状态栏高度:
Rect rect = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;
使用 getWindow()
方法获取 Window 对象,在 Window 对象中通过 getDecorView()
方法获取到 DecorView 对象。再通过 DecorView 对象中的 getWindowVisibleDisplayFrame()
方法获取 Rect 对象,最后通过 Rect 对象的 top
属性获取状态栏的高度。
获取导航栏高度:
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
int navigationBarHeight = 0;
if (resourceId > 0) {
navigationBarHeight = resources.getDimensionPixelSize(resourceId);
}
通过 getResources()
方法获取到 Context 的 Resources 对象,然后通过 getIdentifier()
方法获取到资源的 ID,最后通过 Resources 对象的 getDimensionPixelSize()
方法获取到导航栏的高度。
注意:导航栏的高度在不同手机上可能不同,甚至可能没有导航栏。
通过上述方法,可以获取到 Android 设备的屏幕宽度和高度,以及状态栏和导航栏的高度信息。在开发中,可以使用该信息适配不同的屏幕和布局,提升应用的用户体验。