即使已弃用,在 Display 上使用 .getWidth 是不是安全
Posted
技术标签:
【中文标题】即使已弃用,在 Display 上使用 .getWidth 是不是安全【英文标题】:Is it safe to use .getWidth on Display even though its deprecated即使已弃用,在 Display 上使用 .getWidth 是否安全 【发布时间】:2012-09-28 14:59:26 【问题描述】:所以我有一个小问题,我正在编写一个需要将屏幕宽度发送到服务器的函数。我得到了一切工作,我使用:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
获取宽度。但是 .getWidht() 函数已被弃用,它说你需要使用:
Point size = new Point();
display.getSize(size);
但该功能仅适用于 api 级别 13 或更高级别,而我的最低 sdk 为 8。那我该怎么办?如果我留在 getWidth 那里安全吗?为什么要添加新功能而不是使其向后兼容?
【问题讨论】:
【参考方案1】:这种方法可能会有所帮助:
DisplayMetrics displaymetrics = new DisplayMetrics();
mContext.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenWidth = displaymetrics.widthPixels;
int screenHeight = displaymetrics.heightPixels;
【讨论】:
getDefaultDisplay
已弃用
我们可以将WindowManager.currentWindowMetrics.bounds
用于 30+ API【参考方案2】:
您可以在运行时检查 API 级别,并选择使用哪个,例如:
final int version = android.os.Build.VERSION.SDK_INT;
final int width;
if (version >= 13)
Point size = new Point();
display.getSize(size);
width = size.x;
else
Display display = getWindowManager().getDefaultDisplay();
width = display.getWidth();
【讨论】:
hmm 听起来不错,但是如果我只使用 getwidth 就可以偷窃吗? 是的,如果它在旧版本上不可用,那么您别无选择。 在大多数情况下,您可以使用 getWidth() 做得足够好。【参考方案3】:如果你想正确,请使用这种方法:
int sdk = android.os.Build.VERSION.SDK_INT;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2)
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
else
Point size = new Point();
display.getSize(size);
【讨论】:
您正在将 int 与 String (VERSION.RELEASE) 进行比较。 如果你想正确,你不会将 int 与 String 进行比较,也不会将 int 存储在非 final 局部变量中,你甚至不需要那个变量,为什么将其存储在第一个位置。 ;) 你可能想做if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
display.getSize 也被弃用了【参考方案4】:
这是没有弃用的最新代码。
科特林
val metrics: DisplayMetrics = this.getResources().getDisplayMetrics()
val width = metrics.widthPixels
Java
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
【讨论】:
以上是关于即使已弃用,在 Display 上使用 .getWidth 是不是安全的主要内容,如果未能解决你的问题,请参考以下文章
.dynamicType 已弃用。改用'type(of ...)'
Flutter:'onError' 在 runZoned 函数上已弃用