?机器人的用途:ATTR /在向后兼容的应用程序(Usage of ?android:attr/ i

2019-06-26 02:47发布

我试图让我的ICS(API等级15)应用程序与姜饼(API等级10)兼容,并且我得到InflateException Error inflating class <Unknown>对于具有任何布局XML ?android:attr/属性。 如果我注释掉这些属性,我可以编译和运行应用程序,但然后,当然,看起来aweful。

我宁愿不复制所有从项目android.R.attr ,我使用,但此刻我是迷路了,以另一种方式来做到这一点。

我使用ActionBarSherlock拿到动作条的工作,我似乎不被使用其它任何需要的支持库(虽然我试图算出这个过程中,包括它),它只是这些主题 - 那我卡上的基础资源。

一些我使用的主题资源的有:

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

Answer 1:

由于是在文档一些风格是较高的API。 例如:

  • dividerVertical因为API 11
  • dividerHorizontal因为API 11

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

为了解决您的问题,您可以:

  • 使用样式从API 11,而是把他们的values-v11夹和支持样式旧版本中values使用早期API定制的值或不同的属性。
  • 复制从ICS必要风格
  • 不使用这些样式
  • 使用自定义样式

这取决于什么是你的目标。 第一个建议是有道理的,当应用程序的原生风格对你很重要。
如果你想有全息风格处处那就没有办法比复制它作为一个风格在所有平台上使用。
看看这个项目: https://github.com/Prototik/HoloEverywhere



Answer 2:

使用款式API 11具体的android:ATTR / textAppearanceMedium机器人:ATTR / dividerVertical机器人: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"/>


Answer 3:

请检查支持Android V7 - 程序兼容性项目。 它有许多主题和向后兼容性属性(ATTR / dividerHorizo​​ntal也)

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

要使用V7支持,你必须导入它从你的项目一个Android的lib项目和引用。 它还包含V4支持,所以你可能想在你的库文件夹中删除V4支持:)祝你好运!



文章来源: Usage of ?android:attr/ in backwards compatible apps