我目前这样计算屏幕宽度:
public static int getScreenWidth(@NonNull Context context) {
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.widthPixels;
}
由于这两个函数(getDefaultDisplay()和getMetrics())现在已被弃用,我们应该使用什么呢?
为了计算屏幕宽度减去任何系统条,这应该起作用:
public static int getScreenWidth(@NonNull Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
WindowMetrics windowMetrics = activity.getWindowManager().getCurrentWindowMetrics();
Insets insets = windowMetrics.getWindowInsets()
.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars());
return windowMetrics.getBounds().width() - insets.left - insets.right;
} else {
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.widthPixels;
}
}
请注意,这并不完全相同:使用高度进行测试会产生不同的结果,而且我无法使用新API复制旧API的功能(部分原因是旧API的行为有点棘手,并非总是想要的原因,因此不推荐使用)。但是,实际上,作为通用屏幕宽度,对于许多事情来说应该足够了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句