【发布时间】:2015-10-14 09:53:55
【问题描述】:
我目前正在构建一个面向 API 23 的应用,最低 API 为 19。
在 API 23 中,android.widget.TimePicker 组件的一些方法被替换了。
例如:
TimePicker.getCurrentHour();
被替换为:
TimePicker.getHour();
现在,在我的应用中使用 TimePicker 时,我应该使用以下 if 语句检查设备是否使用 API 22 或更高版本:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
TimePicker.getHour();
else
TimePicker.getCurrentHour();
我所做的是扩展 TimePicker 类并实现不推荐使用的方法,如下所示:
public class TimePicker extends android.widget.TimePicker {
public TimePicker(Context context) {
super(context);
}
public void setCurrentHour(int hour) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
super.setHour(hour);
else
super.setCurrentHour(hour);
}
public void setCurrentMinute(int minute) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
super.setMinute(minute);
else
super.setCurrentMinute(minute);
}
public int getCurrentHour() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
return super.getHour();
else
return super.getCurrentHour();
}
public int getCurrentMinute() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
return super.getMinute();
else
return super.getCurrentMinute();
}
}
所以使用这个类的用户不会影响方法的改变(他应该只在他的实现中替换 TimePicker 类的导入)。
这样做是否正确?还是有更好的解决方案?
谢谢
【问题讨论】:
-
这是个好办法。在我看来,你成功了! :) 也许你的方法应该以新的命名约定命名,当你放弃对 pre M 的支持时,使过渡更容易。
-
嘿,这个 .M 是关于什么的?
-
Build.VERSION_CODES.M 是指 API 23 (Android Marshmallow)
-
我将所有需要版本检查的方法保存在一个单独的类 (SDKHelper) 中,以便将来需求发生变化并且应用程序代码不会被检查乱七八糟通过所有不同的课程。
-
你能给我举个例子吗?
标签: java android deprecated deprecation-warning