Intereting Posts

Как у меня есть тень на моем ActionBar (ActionBarSherlock)?

Я включаю мой стиль xml-макета:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.Styled" parent="Theme.Sherlock"> <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item> <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item> </style> <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar"> <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> <item name="background">@color/red</item> <item name="android:background">@color/red</item> <item name="windowContentOverlay">@null</item> <item name="android:windowContentOverlay">@null</item> </style> <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title"> <item name="android:textColor">@color/white</item> <item name="android:textSize">21sp</item> </style> </resources> 

Некоторые из поиска по интернету предполагают, что для использования windowContentOverlay установлено значение @null. Но когда я использую его в стиле xml, он ничего не меняет. Может ли кто-нибудь помочь, что делать?

Solutions Collecting From Web of "Как у меня есть тень на моем ActionBar (ActionBarSherlock)?"

Если вы хотите создать тень под 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: windowContentOverlay .

 <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 и новее.

Изменить: В Android 4.3 (API-уровень 18) есть ошибка android:windowContentOverlay не работает. Он должен быть исправлен в будущем выпуске. В случае, если это необходимо для Android 4.3, вы можете найти обходные пути, связанные с сообщением об ошибке.

Как и в предыдущем ответе, используйте «windowContentOverlay» в теме приложения, а не стиль панели действий.

 <style name="Theme.Styled" parent="Theme.Sherlock"> ... <item name="windowContentOverlay">@drawable/my_actionbar_shadow</item> </style> 

Если вы хотите реалистичную тень, вы можете найти ее в «Android Folder» / platform / android-16 / data / res / drawable-hdpi /

Ab_solid_shadow_holo.9.png и скопируйте его в папку drawable-hdpi, тогда конечный результат будет

 <style name="Theme.Styled" parent="Theme.Sherlock"> ... <item name="windowContentOverlay">@drawable/ab_solid_shadow_holo</item> </style> 

Кроме того, выше API21 (Lollipop), вам также понадобится это в коде.

 getSupportActionBar().setElevation(0);