Ответ 1
Если вы хотите создать тень ниже ActionBar, вам нужно установить параметр android:windowContentOverlay
в теме приложения (в коде вы неправильно устанавливаете его в стиле ActionBar).
В вашем примере это будет:
<style name="Theme.Styled" parent="Theme.Sherlock">
...
<item name="android:windowContentOverlay">@drawable/my_actionbar_shadow</item>
</style>
Использование значения @null
удаляет тень.
Эта одна строка устанавливает тень на ActionBar на Android 3.0 и новее. Однако, если вы используете ActionBarSherlock, он не будет работать так, как вы ожидаете. Это создало бы тень поверх окна над ActionBarSherlock на Android-устройствах, на которых установлена система старше Android 4.0 (хотя ActionBar присутствует в api с Android 3.0, ActionBarSherlock использует пользовательскую реализацию для всех версий Android старше Android 4.0).
Чтобы создать тень ниже ActionBarSherlock, вы должны установить параметр windowContentOverlay
в теме приложения (обратите внимание на отсутствующий android:
).
<style name="Theme.Styled" parent="Theme.Sherlock">
...
<item name="windowContentOverlay">@drawable/my_actionbar_shadow</item>
</style>
Опять же, использование @null
удаляет тень.
Хотя эта строка работает для ActionBarSherlock, она не работает на устройствах Android под управлением Android 4.0 и новее, тень не создается в ActionBar на таких устройствах. Итак, как объединить эти два параметра, чтобы получить желаемую тень как в ActionBar, так и в ActionBarSherlock?
Используйте квалификаторы конфигурации ресурсов, в вашем случае используйте квалификаторы версии платформы.
В res/values/styles.xml
используйте второй код xml. И в res/values-v14/styles.xml
используйте первый xml-код. Поэтому версия ActionBarSherlock используется по умолчанию (для версий до Android 4.0), а версия ActionBar используется для Android 4.0 и новее.
Edit:
В Android 4.3 (API уровня 18) есть ошибка , android:windowContentOverlay
не работает. Он должен быть исправлен в будущем выпуске. В случае, если это необходимо для Android 4.3, вы можете найти обходные пути, связанные с сообщением об ошибке.