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

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

我宁愿不复制我正在使用的所有项目,但目前我对另一种方法感到困惑。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


答案 1

使用 API 11 中的样式,特别是 android:attr/textAppearanceMedium ?android:attr/dividerVertical ?android:attr/dividerHorizontal

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

<!-- 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"/>

答案 2

文档中所示,某些样式采用更高的 API。例如:

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

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

要处理您的问题,您可以:

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

这取决于你的目标是什么。当本机应用程序样式对您很重要时,第一个建议是有意义的。
如果你想让Holo风格无处不在,那么没有办法复制它并作为所有平台的一种风格使用。
看看这个项目:https://github.com/Prototik/HoloEverywhere


推荐