【问题标题】:Using attributes from API level beyond minSdkVersion使用 minSdkVersion 之外的 API 级别的属性
【发布时间】:2014-12-09 15:27:27
【问题描述】:

我是 Android 开发的新手,我想知道如果您从高于 minSdkVersion 的 API 级别对 XML 标记使用属性会发生什么。

例如有:

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="20" />

然后使用这个:

<activity android:logo="@drawable/iconwhatever"></activity>

“android:logo”属性来自 API 级别 11。

在 Android Studio 中会出现以下错误,但我想知道如果不理会会发生什么:

Attribute "logo" is only used in API level 11 and higher. (Current min is 9)

对此的任何帮助将不胜感激。

【问题讨论】:

标签: android xml api manifest


【解决方案1】:

不支持的属性会被安全忽略。

来自 SDK documentation

在解析 XML 资源时,Android 会忽略当前设备不支持的 XML 属性。因此,您可以安全地使用仅新版本支持的 XML 属性,而不必担心旧版本遇到该代码时会中断。

【讨论】:

  • 很好的答案。谢谢你的链接。
  • 这根本不是真实的。例如,我现在正在崩溃,因为我正在使用背景可绘制对象,其中可绘制对象是按钮的涟漪效应。它崩溃了,因为在可绘制对象中我有 targetApi 棒棒糖(v21),但我试图在 api v19 上运行应用程序。它在 android.view.InflateException 上崩溃:Binary XML file line #10: Error inflating class
  • @piggy 这是因为 API 19 不支持该属性,还是因为该属性的值恰好不受支持?
【解决方案2】:

对于 XML 属性,使用来自较新 API 的属性是安全的(它们将被简单地忽略,因为 XML 解析器甚至不会在旧版本上查找它们)。

【讨论】:

    【解决方案3】:

    在这种情况下,必须通过代码而不是 XML 来操作不同 API 的属性。

    在代码中,你可以对待它。

    例如:

     if(Build.Version.SDK_INT > 10){
    
         .... use an attribute
    
       }
    else{
    
        .... use other
    }
    

    对于您的具体情况,请使用“图标”

    <activity android:icon="@drawable/iconwhatever"></activity>
    

    【讨论】:

      猜你喜欢
      • 2020-07-16
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 2017-04-24
      • 2021-09-05
      • 2018-03-15
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多