尽管我指定了API级别,但Android仍然显示弃用警告

6

我正在编写API level 11的代码。因此,为了获取显示器的宽度,我有以下函数:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
        Point size = new Point();
        display.getSize(size);
        width = size.x;
    }
    else {
        width = display.getWidth();
    }

我这样做是为了避免得到“deprecate”警告。但是对于getWidth,我仍然收到警告。为什么警告没有消失?

我还收到有关getSize的错误,说调用需要api级别13,但检测到的是11。

2个回答

10

这个IDE还不够智能,无法意识到你试图做什么,因此你仍然会收到警告。

如果你非要消除它们,你可以定义两个方法:一个在Honeycomb路线中执行代码,带有注释@TargetApi(13),另一个在其他路线中执行代码,带有注释@SuppressWarnings("deprecation")。个人而言,我不会太担心。

例如:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    width = getWidthHoneycombMR2();
}
else {
    width = getWidthLegacy(display);
}

...

@TargetApi(13)
public int getWidthHoneycombMR2() {
    Point size = new Point();
    display.getSize(size);
    return size.x;
}

@SuppressWarnings("deprecation")
public int getWidthLegacy(Display display) {
    return display.getWidth();
}

2

Deprecation的基本意思是,代码将很快停止支持,因为开发者认为有更好的方法来完成任务。在这种情况下,请使用Display Metrics

DisplayMetrics display = this.getResources().getDisplayMetrics();

    int width = display.widthPixels;
    int height = display.heightPixels;

谢谢您的帮助。点赞👍。虽然您的答案是正确的并且更加针对这种情况,但我不能惩罚 @Espiandev 回答警告问题。 - learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接