在Android开发中获取屏幕分辨率可以通过以下几种方法实现:
1. 使用DisplayMetrics类
通过`WindowManager`获取`DisplayMetrics`对象,直接读取屏幕的宽高像素值:
java
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int widthPixels = metrics.widthPixels; // 屏幕宽度(像素)
int heightPixels = metrics.heightPixels; // 屏幕高度(像素)
注意:此方法在API 30后废弃,建议使用以下方式。
2. 兼容API 30及以上的方法
通过`WindowMetrics`(Android 12+)或`Display#getRealSize()`:
java
// 方式1:WindowMetrics(推荐)
WindowMetrics windowMetrics = getWindowManager().getCurrentWindowMetrics();
Rect bounds = windowMetrics.getBounds();
int width = bounds.width();
int height = bounds.height();
// 方式2:Display#getRealSize(兼容旧版本)
Point size = new Point();
getWindowManager().getDefaultDisplay().getRealSize(size);
int width = size.x;
int height = size.y;
3. 考虑屏幕方向动态调整
需要配置变化(如横竖屏切换),动态更新分辨率:
java
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 重新获取分辨率
}
4. 像素密度(DPI)相关扩展
通过`DisplayMetrics`还可获取屏幕密度指标:
java
float density = metrics.density; // 逻辑密度系数(基于160DPI缩放)
int densityDpi = metrics.densityDpi; // 实际DPI值(如320、480等)
float scaledDensity = metrics.scaledDensity; // 字体缩放系数
注意事项:
物理分辨率 vs 可用区域:部分设备有导航栏或状态栏,实际可用区域可能小于物理分辨率,可用`getWindowManager().getCurrentWindowMetrics().getWindowInsets()`计算扣除区域。
折叠屏适配:折叠屏展开/折叠时分辨率变化,需通过`Jetpack WindowManager`库屏幕状态。
如需精确控制UI布局,建议结合`ConstraintLayout`和尺寸限定符(如`sw600dp`)进行多屏幕适配,而非仅依赖代码获取分辨率。