使用?android:attr /在向后兼容的应用程序中

时间:2012-07-08 12:06:09

标签: java android android-theme android-compatibility

我正在尝试使我的ICS(API级别15)应用程序与Gingerbread(API级别10)兼容,并且我获得InflateException Error inflating class <Unknown>任何具有?android:attr/属性的布局XML。如果我注释掉这些属性,我可以编译并运行应用程序,但当然,它看起来很糟糕。

我宁愿不复制我正在使用的android.R.attr中的所有项目,但目前我已经迷失了另一种方式。

我正在使用ActionBarSherlock来使ActionBar正常工作,我似乎没有使用任何其他需要支持库的东西(虽然我在尝试解决这个问题的过程中将其包含在内),它只是这些基于主题的资源我坚持不懈。

我正在使用的一些主题资源是:

?android:attr/textColorSecondaryInverse ?android:attr/textAppearanceLarge ?android:attr/dividerVertical ?android:attr/selectableItemBackground ?android:attr/textAppearanceMedium ?android:attr/dividerVertical ?android:attr/dividerHorizontal

3 个答案:

答案 0 :(得分:12)

使用API​​ 11中的样式特别是android:attr / textAppearanceMedium?android:attr / dividerVertical?android:attr / dividerHorizo​​ntal

最简单的方法是在您需要的地方使用以下代码

<!-- For Horizontal Line-->
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="4dip"
android:layout_marginRight="4dip"
android:background="#aaa"
android:layout_alignParentTop="true"/>

<!-- For Vertical Line-->

<View
android:id="@+id/VerticalLine"
android:layout_width="1dip"
android:layout_height="wrap_content"
android:layout_marginBottom="4dip"
android:layout_marginTop="4dip"
android:background="#aaa"/>

答案 1 :(得分:11)

documentation一样,某些样式的API更高。例如:

    自API 11起
  • dividerVertical
  • 自API 11起
  • dividerHorizontal

?标记用于引用当前主题中的样式。

要解决您的问题,您可以:

  • 使用API​​ 11中的样式,但使用自定义值或旧API中的不同属性将它们放入values-v11文件夹和values中旧版本的支持样式。
  • 从ICS复制必要的样式
  • 不要使用这些样式
  • 使用自定义样式

这取决于你的目标。当本机应用程序对您很重要时,第一个建议是有意义的 如果你想在任何地方都拥有Holo风格,那么就没有办法复制它并将其用作所有平台的一种风格 看看这个项目:https://github.com/Prototik/HoloEverywhere

答案 2 :(得分:3)

请检查android支持v7 - appcompat项目。它有许多主题和属性用于向后兼容(attr / dividerHorizo​​ntal)

http://developer.android.com/tools/support-library/features.html#v7-appcompat

要使用v7支持,您必须将其作为Android lib项目导入,并从您的项目中引用它。它还包含v4支持,因此您可能希望删除libs文件夹中的v4支持:)祝你好运!!