分辨率分为可用分辨率和实际分辨率
- 可用分辨率是去除状态栏和底部小白条后的分辨率
- 实际分辨率是屏幕整体分辨率,包含状态栏和底部小白条
Java版本
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics displayMetricsAvailable = new DisplayMetrics();
DisplayMetrics displayMetricsActual = new DisplayMetrics();
// 获取屏幕可用分辨率(排除顶部状态栏和底部小白条)
getWindowManager().getDefaultDisplay().getMetrics(displayMetricsAvailable);
// 获取屏幕实际分辨率
getWindowManager().getDefaultDisplay().getRealMetrics(displayMetricsActual);
int widthPixelsAvailable = displayMetricsAvailable.widthPixels;
int heightPixelsAvailable = displayMetricsAvailable.heightPixels;
int widthPixelsActual = displayMetricsActual.widthPixels;
int heightPixelsActual = displayMetricsActual.heightPixels;
System.out.println("屏幕宽为:" + widthPixelsAvailable + ", " + "屏幕高为:" + heightPixelsAvailable);
System.out.println("屏幕宽为:" + widthPixelsActual + ", " + "屏幕高为:" + heightPixelsActual);
}
}
Kotlin版本
// 获取屏幕可用分辨率(排除顶部状态栏和底部小白条)
val displayMetricsAvailable = resources.displayMetrics
val widthPixelsAvailable = displayMetricsAvailable.widthPixels
val heightPixelsAvailable = displayMetricsAvailable.heightPixels
//获取屏幕实际分辨率
val displayMetricsActual = resources.displayMetrics
val clazz = Class.forName("android.view.Display")
val method = clazz.getMethod("getRealMetrics", DisplayMetrics::class.java)
// 根据安卓版本进行处理
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
method.invoke(display, displayMetricsActual)
} else {
windowManager.defaultDisplay.getRealMetrics(displayMetricsActual)
}
val widthPixelsActual = displayMetricsActual.widthPixels
val heightPixelsActual = displayMetricsActual.heightPixels
println("屏幕宽为:$widthPixelsAvailable, 屏幕高为:$heightPixelsAvailable")
println("屏幕宽为:$widthPixelsActual, 屏幕高为:$heightPixelsActual")