18

例如,这段代码:

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 第 20 行 Android Lint 问题

我明白为什么我在编译时得到这个错误。但是有没有办法将源 Java 类标记为仅在某些 API 级别 11 上使用?或者使用定义/类似的包围代码块,以便代码仅在 API 级别 11 以上的设备上进行后期绑定/jitted?实现我想要的最佳解决方案是什么?(这是在具有 CalendarView 功能的设备上提供一个活动。)

4

2 回答 2

33

我不确定这是否能解决你的问题,

但是您用来检查版本的内容在 API 9 下不起作用(并且您从 API 8 开始支持)。

你应该使用:

if (Build.VERSION.SDK_INT > 9) { 

或者因为有问题的函数是 API 11,请检查“SDK_INT>10”

然后对于 Eclipse 上的 lint 错误,按照人们的评论执行操作,禁用 lint 错误或将 @SuppressLint("NewAPi") 或该函数的目标添加到 11。

于 2013-03-19T15:15:50.983 回答
0

对于在很久以后偶然发现这一点的任何人,在运行时基于 API 版本有条件地执行代码是目前支持不同平台版本的有效方式。请参阅:https ://developer.android.com/training/basics/supporting-devices/platforms#version-codes

它在哪里说:

Android 在 Build 常量类中为每个平台版本提供了唯一的代码。在您的应用程序中使用这些代码来构建条件,以确保仅当这些 API 在系统上可用时才执行依赖于更高 API 级别的代码。

并举例说明:-

爪哇:

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)
    }
}
于 2021-05-29T12:00:45.500 回答