我遇到了不推荐使用的Display.getWidth()
方法,发现它已被替换为android.view.getSize()
. 但是getSize()
,仅在 API 13 之后才可用,并且View
似乎未包含在 V4 Android 支持库中。
因此,如果我想避免被弃用的调用,我该如何在不为各种 API 级别维护不同的项目/构建的情况下做到这一点。
我遇到了不推荐使用的Display.getWidth()
方法,发现它已被替换为android.view.getSize()
. 但是getSize()
,仅在 API 13 之后才可用,并且View
似乎未包含在 V4 Android 支持库中。
因此,如果我想避免被弃用的调用,我该如何在不为各种 API 级别维护不同的项目/构建的情况下做到这一点。
给定一个Display
名为 的对象display
,这应该有效:
int width=-1;
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB_MR2) {
Point size=new Point();
size=display.getSize(size);
width=size.x;
}
else {
width=display.getWidth();
}
IOW,Build.VERSION.SDK_INT
用于在引入新 API 的“之前”和“之后”案例之间进行分支。
这将要求您的构建目标(Eclipse 中的项目 > 属性 > Android)设置为 API 级别 13+,因此您可以调用getSize()
.
有一个官方的 Android 开发者类Creating Backward-Compatible UIs:
此类演示如何以向后兼容的方式使用新版本 Android 中可用的 UI 组件和 API,确保您的应用程序仍可在先前版本的平台上运行。
他们提倡将 Java 接口用于未向后移植的库,以获得更加面向对象的解决方案。然后将它们扩展为两个具体的类:一个为不受支持的平台提供替代行为,另一个为支持的平台调用实际 API。
然后有一个工厂类通过检查当前平台与支持的平台范围来实例化正确的类。但最终,它归结为一个有条件的 like if ( Build.VERSION.SDK_INT >= HONEYCOMB_MR2 )
。