Использование? Android: attr / в обратно совместимых приложениях

Я пытаюсь сделать свое приложение ICS (уровень API 15) совместимым с Gingerbread (уровень API 10), и я получаю InflateException Error inflating class <Unknown> для любого XML-макета с атрибутом ?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


person dsample    schedule 08.07.2012    source источник
comment
К сожалению, стиль dividerHorizontal не определен в ABS (моя версия - 4.1.0). Может быть, потому что он охватывает только стили, используемые ActionBar). А собственно dividerVertical определяется. Очень неприятно, что тема ABS не охватывает все оригинальные стили!   -  person WindRider    schedule 31.01.2013
comment
@WindRider не вводит других в заблуждение. Отметьте 2 строки в источниках Android. А это простой 1x1 девять патчей png. То же самое и ActionBarSherlock. Но он не добавляет псевдоним dividerHorizontal   -  person mente    schedule 16.08.2013


Ответы (3)


Как и в документации, некоторые стили находятся в более высоком API. Например:

  • dividerVertical с API 11
  • dividerHorizontal с API 11

Знак ? используется для ссылки на стиль в текущей теме.

Чтобы решить вашу проблему, вы можете:

  • использовать стили из API 11, но помещать их в папку values-v11 и поддерживать стили для более старых версий в values с использованием пользовательских значений или различных атрибутов из старого API.
  • скопировать необходимые стили из ICS
  • не используйте эти стили
  • использовать собственные стили

Это зависит от вашей цели. Первое предложение имеет смысл, когда для вас важен собственный стиль приложения.
Если вы хотите, чтобы стиль Holo был повсюду, нет другого способа, кроме как скопировать его и использовать как единый стиль для всех платформ.
Взгляните на этот проект: https://github.com/Prototik/HoloEverywhere

person pawelzieba    schedule 08.07.2012
comment
Есть где-нибудь пример вашего первого предложения? Я думаю, что ссылка на собственные стили в v11 + была бы лучше, но я не уверен, что мне нужно было бы добавить в различные определения стилей values и values-v11, чтобы передать их в обычные ресурсы Holo для v11 и определить конкретно (копирование ресурса Holo , Наверное) для версии совместимости. - person dsample; 08.07.2012

использовать стили из 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"/>
person sandeep_jagtap    schedule 01.02.2013
comment
Идеальное решение. Но зачем вам marginLeft и marginRight? Атрибут android: divider =? Android: attr / dividerHorizontal охватывает всю ширину экрана. - person IgorGanapolsky; 29.08.2013
comment
Я хотел горизонтальную линию с этим полем. Необязательно иметь маржу. Вы можете удалить это. - person sandeep_jagtap; 29.08.2013

Пожалуйста, проверьте поддержку Android v7 - проект appcompat. Он имеет множество тем и атрибутов для обратной совместимости (также attr / dividerHorizontal)

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

Чтобы использовать поддержку v7, вы должны импортировать его как проект Android lib и ссылаться на него из своего проекта. Он также содержит поддержку v4, так что вы можете удалить поддержку v4 в папке libs :) Удачи !!

person khigianguyen    schedule 20.10.2013
comment
Я не думаю, что это возможно. Аттр существует, но нет гарантии, что для вертикального разделителя можно рисовать. - person Tim Kist; 15.11.2013
comment
Чертежи (включая вертикальный разделитель) также упакованы в проект поддержки v7 вместе со значениями атрибутов xml :). - person khigianguyen; 15.11.2013
comment
Извините меня пожалуйста. Я не мог видеть вертикальный разделитель. Это в res / drawable-mdpi / abc_list_divider_holo_ (dark / light) .9.png - person Tim Kist; 15.11.2013
comment
Я не могу :(. Я пытался удалить голосование, но оно заблокировано. Я пытался отредактировать его, но это сработало :(. Извините. - person Tim Kist; 19.11.2013