Theming ActionBarSherlock дает ошибку уровня api

Я обновил свой проект с Android 4.2 до Android 4.2.2, и я внезапно получил эту ошибку в моих стилях .xml:

<style name="Theme.Styled" parent="Theme.Sherlock.Light.DarkActionBar">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
   <!-- Requires level 11. Current: 7 --> <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

Как это исправить? Согласно документам ABS, так это должно быть сделано. См.: http://actionbarsherlock.com/theming.html

Ответ 1

Я попытался перезапустить, но мне в конечном итоге нужно было очистить проект: Нажмите "Project- > Clean..."

Ошибка возвращалась каждый раз, когда я сохранял свой стиль .xml. На данный момент я устанавливаю свой минимальный уровень API на 11 временно, редактируя этот файл, чтобы избежать ошибок, а затем сбросьте его назад и очистите, когда я хочу запустить его на эмуляторе с низким уровнем API.

Изменить: Если вам не нравится, когда вы оставляете свою версию SDK с минимальным значением, она также работает для меня, чтобы изменить ее на 14 (некоторое другое большое число), сохранить AndroidManifest.xml, изменить его назад и снова сохранить.

Ответ 2

Я использовал предложенное быстрое исправление Eclipse (CTRL-1 на подчеркнутом элементе) и просто добавил инструменты подавления предупреждений: ignore = "NewApi"

<item name="android:actionBarStyle" tools:ignore="NewApi">@style/Widget.Styled.ActionBar</item>

Таким образом, вам не нужно игнорировать все предупреждения Lint, что может быть удобно в других случаях, и вы можете скомпилировать проект без необходимости перенастраивать целевой API каждый раз, когда вы редактируете файл.

Обновление: как указано в комментариях greg7gkb: Не забывайте объявление пространства имен (xmlns:tools="schemas.android.com/tools").

Ответ 3

В конечном счете, вы действительно должны добавить атрибут, который дает вам ошибку в файле styles.xml, специфичном для API.

Этот ответ SO описывает это намного лучше, чем я мог: android: actionBarStyle требует уровня API 11

Я думаю, что ВСЕ другие ответы - это не исправления, а обходные пути (подрыв ошибки, но в конечном итоге это не исправление).

Ответ 4

В Intellij IDEA (предположительно также затмение) вы можете отключить предупреждения API для всего файла, добавив

<!--suppress AndroidLintNewApi -->

Перед тем, как объявить схему. Таким образом, ваш xml файл будет выглядеть примерно так:

<!--suppress AndroidLintNewApi -->
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    < ... />
</resources>