即使已弃用,在 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 &gt;= 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 函数上已弃用

已弃用:指令 'allow_url_include' 在第 0 行的 Unknown 中已弃用

警告 onRowClick 已弃用

KissXML 和 GData 已弃用?

PayPal ExpressCheckout 是不是已弃用?