【问题标题】:Android Call requires API level 13 (current min is 10): android.view.Display#getSizeAndroid 调用需要 API 级别 13(当前最低为 10):android.view.Display#getSize
【发布时间】:2014-04-24 18:56:33
【问题描述】:

我正在尝试针对尽可能多的架构,并尽可能少地发出警告。

Point dims = new Point();
if (android.os.Build.VERSION.SDK_INT >= 13) {
      mWindowManager.getDefaultDisplay().getSize(dims);
} else if (android.os.Build.VERSION.SDK_INT < 13) {
  dims.x = mWindowManager.getDefaultDisplay().getWidth();
  dims.y = mWindowManager.getDefaultDisplay().getHeight();
}

但这给了我错误和警告:

Call requires API level 13 (current min is 10): android.view.Display#getSize
The method getWidth() from the type Display is deprecated

They say to change the manifesto(或here)但是为什么上面的代码不适用于编译器?我不能在 api 10 到 18 的范围内摆脱两者吗?

【问题讨论】:

  • 使用时是否会导致应用崩溃?通常它会给你一个错误,但程序仍然会运行。这主要是一个警告
  • 忽略此类警告将使运行API 低于请求的设备将失败,并且您的应用程序可能会抛出Exception。通常有一些解决方法不需要增加minSdk,不过我不知道如何避免这种情况。
  • 或者您可以尝试并做的是DisplayMetrics display = new DisplayMetrics(); 然后做getActivity().getWindowManager().getDefaultDisplay().getMetrics(display); 这将允许您通过int width = display.widthPixels;heightPixels 获得高度和高度
  • 因为第一个没有编译。

标签: android


【解决方案1】:

您已经检查了 SDK 版本,因此可以忽略来自编译器的弃用警告和有关新 API 的 lint 警告。

将代码sn-p拉到一个单独的方法中,添加如下注解:

@TargetApi(13)
@SuppressWarnings("deprecation")

请注意,else ifif 部分是多余的。简单的else 就够了。

【讨论】:

  • 就是这样。我把两者同时放了,瞧,警告和错误被删除了。
【解决方案2】:

要检索显示大小,推荐的方法是使用

context.getResources().getDisplayMetrics()

相反。然后使用widthPixelsheightPixels 属性。

在多显示器的情况下,使用当前上下文为您提供当前显示器的尺寸,这也更安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 2019-08-28
    • 2021-01-13
    • 1970-01-01
    • 2015-11-17
    相关资源
    最近更新 更多