2012-10-26 12 views
3

我正在编写一个Android应用程序,针对API级别8到14.我想要使用API​​级别11和更高的Theme.Holo.Light主题,以及API级别较低的Theme.Light主题。根据SDK API级别使用不同的资源文件(使用Eclipse)?

RES /值/ style.xml的含量为:

<resources> 
    <style name="AppTheme" parent="android:Theme.Light" /> 
</resources> 

和RE的含量/值-V11/style.xml是:

<resources> 
    <style name="AppTheme" parent="android:Theme.Holo.Light" /> 
</resources> 

这种用于API编译以及级别14,但是当我将目标API级别设置为8时,它会给出以下错误:“检索项目的父项时发生错误:未找到与名称匹配的资源'在res/values-中的android:Theme.Holo'” v11/style.xml和“Android AAPT问题”。

如果我删除文件res/values-v11/style.xml,该应用程序将针对API级别8目标正确编译。

现在,我的理解是,编译API级别8时,构建系统应忽略名称以“-v11”结尾的资源文件夹内的任何内容。

我在做什么错?

回答

5

这是因为API 8不知道Theme.Holo.Light是如何在API11中引入的。您必须编译最高您使用的API版本元素。

而你理解资源选择器错误。它不是用于有条件地构建应用程序。它用于在运行时选取正确的资源

请参阅this article

+0

让我看看我是否正确理解你:我应该编译为API 14,并且相同的编译代码(只提供API 8支持的API调用)将在API 8到API 14之间运行? – cjcela

+0

是的。假设你的代码在没有事先检查API设备的情况下没有使用API​​14方法,它将在minSdkVersion之后的任何API上运行得很好。这使得您可以为许多API使用一个二进制文件,并且资源选择器可以让您分离资产或区分某些元素,就像您不需要为每个API版本构建单独的二进制文件一样 –

+0

这正是我所需要的。谢谢! – cjcela

相关问题