例如,这段代码:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD) {
myCalendarView.setOnDateChangeListener(
new OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
Toast.makeText
(
getApplicationContext(), ""+dayOfMonth, 0
).show();
}
}
);
}
给出错误:
描述资源路径位置类型调用需要API级别11 (当前分钟为8): android.widget.CalendarView #setOnDateChangeListener example.java / example / src / com / example / example line 20 Android Lint问题
我理解为什么编译时会出现此错误。但有没有办法将源Java类标记为仅用于某个API级别-11?或者使用定义/类似的环绕代码块,以便代码仅在API级别11以上的设备上进行后期绑定/ jitted?达到我想要的最佳解决方案是什么? (这是为了在设备上提供CalendarView的活动。)
答案 0 :(得分:25)
我不确定这是否能解决你的问题,
但您使用的检查版本在API 9下无效 (自API 8以来,您一直在支持。)
您应该使用:
if (Build.VERSION.SDK_INT > 9) {
或者,由于有问题的功能是API 11,请检查“SDK_INT> 10”
然后对于eclipse上的lint错误,做人们评论,禁用lint错误或将@SuppressLint(“NewAPi”)或目标添加到该函数为11。
答案 1 :(得分:0)
对于任何后来遇到这个问题的人来说,在运行时根据 API 版本有条件地执行代码目前是支持不同平台版本的有效方式。 请参阅:https://developer.android.com/training/basics/supporting-devices/platforms#version-codes
它说的是:
<块引用>Android 在 Build 中为每个平台版本提供唯一代码 常量类。在您的应用中使用这些代码来构建条件 确保执行依赖于更高 API 级别的代码 仅当这些 API 在系统上可用时。
并举例:-
Java:
private void setUpActionBar() {
// Make sure we're running on Honeycomb or higher to use ActionBar APIs
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
科特林:
private fun setUpActionBar() {
// Make sure we're running on Honeycomb or higher to use ActionBar APIs
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
actionBar.setDisplayHomeAsUpEnabled(true)
}
}