我正在尝试了解Android中可绘制文件夹的工作原理。我发现在项目的资源文件夹中,它有以下文件夹:
res/drawable-ldpi/
res/drawable-ldpi-v8/
res/drawable-ldpi-v11/
res/drawable-mdpi/
res/drawable-mdpi-v8/
res/drawable-mdpi-v11/
res/drawable-hdpi/
res/drawable-hdpi-v8/
res/drawable-hdpi-v11/
res/drawable-xhdpi/
res/drawable-xhdpi-v8/
res/drawable-xhdpi-v11/
res/drawable-xxhdpi/
res/drawable-xxhdpi-v8/
res/drawable-xxhdpi-v11/
有人可以告诉我这些文件夹的回退机制是如何工作的吗? v8和v11的含义是什么?
答案 0 :(得分:3)
-v11
和-v8
是版本限定符(您可以阅读更多here),适用于版本11和版本8的android。如果您的应用程序正在其中一个上运行,那么它会尝试从特定文件夹中选择drawable。如果它不在那里,那么它会尝试不那么具体。例如。您正在mdpi
上运行Honeycomb
屏幕,第一次尝试是res/drawable-mdpi-v11/
。如果drawable不在那里,它会在res/drawable-mdpi/
中查找它。查找将继续,直到找到与您的配置最接近的drawable。
答案 1 :(得分:3)
来自Android doc:
设备支持的API级别。例如,API级别1的v1(Android 1.0 或更高级别的设备)和API级别4的v4(Android 1.6 或更高级别的设备)。有关这些值的详细信息,请参阅Android API级别文档。
-v8
和-v11
是API version但是当android确定使用资源的最佳匹配时,它会将它们用作“级别”(而不是严格的api版本号),例如与您的项目文件夹结构:
当设备运行带有 mdpi 屏幕的Froyo(Android 2.2, API 8 )时,资源将从res/drawable-mdpi-v8/
文件夹中获取
当设备运行带有 mdpi 屏幕的Gingerbread(Android 2.3, API 10 )时,资源也将从res/drawable-mdpi-v8/
文件夹中获取(因为8< 8 ; 10< 11)
当设备运行Ice Cream Sandwich(Android 4.0, API 15 )并带有 mdpi 屏幕时,资源也会从res/drawable-mdpi-v11/
文件夹中获取(因为11< 15)
-
为什么默认的res文件夹是v-8
,v-11
,v-15
...而不是v-12
,v-13
或v-16
... ?
因为它是Android的主要版本,其中包含UI机制的更改(例如,Api 11是针对平板电脑优化的第一款Android)。