在API级别30(Android 11)上获取屏幕宽度:现在不建议使用getDefaultDisplay()和getMetrics()。我们应该用什么代替呢?

丹尼斯:

我目前这样计算屏幕宽度:

public static int getScreenWidth(@NonNull Context context) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    return displayMetrics.widthPixels;
}

由于这两个函数(getDefaultDisplay()getMetrics())现在已被弃用,我们应该使用什么呢?

瑞安M:

为了计算屏幕宽度减去任何系统条,这应该起作用:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档