呼叫需要API级别16(当前最小值为14)

时间:2015-08-25 17:37:32

标签: android android-layout android-fragments android-activity android-xml

我的代码中有这一行:

linearLayout.setBackground(drawable);

setBackground()显示以下错误:

  

呼叫需要API级别16(当前最小值为14)

这是什么意思?

我可以提高我的API级别吗?

更高/更低的API级别是什么意思?

如果API级别更高,是否会限制我的应用可以使用的设备数量?

4 个答案:

答案 0 :(得分:8)

  

这是什么意思?

这意味着在API级别16中添加了setBackground(Drawable)方法,而旧设备没有。但是,您的应用minSdkVersion为14.因此,除非您在API Level 14和15设备上采取措施避免此行,否则您的应用将在这些设备上崩溃。

  

我可以提高我的API级别吗?

您可以将minSdkVersion设置为16。

  

如果API级别更高,是否会限制我的应用可以使用的设备数量?

是。如果您说minSdkVersion为16,则运行早于此版本的Android的设备无法运行您的应用。

撰写本文时,about 90% of Android devices accessing the Play Store are on API Level 16 or higher(即正在运行Android 4.1或更高版本)。

您可以在the documentation中详细了解API级别的概念。请注意,此文档有点陈旧,因为它侧重于清单中定义的minSdkVersion。在Android Studio项目中,minSdkVersion通常在app模块的build.gradle文件中定义。

答案 1 :(得分:6)

  

我可以提高我的API级别吗?

您可以将API设置为16,它会将设备限制在16以下,但它将完美适用于设备API 16及更高版本

  

否则您可以使用API​​检查并设置

final int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    layout.setBackgroundDrawable( getResources().getDrawable(R.drawable.ready) );
} else {
    layout.setBackground( getResources().getDrawable(R.drawable.ready));
}

答案 2 :(得分:1)

使用仅在API LEVEL&gt; = 16中支持的验证方法(请注意使用ContextCompat类:

  if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
            linearLayout.setBackground(ContextCompat.getDrawable(this, drawableid));
        }

答案 3 :(得分:0)

使用:

layout.setBackgroudResource(R.drawable.ready);