Intereting Posts
Гладкое слайд-изображение в одну сторону Есть ли какой-то генератор «Feature Graphic» для Google Play? Недопустимый int в xml цветном файле Android при запуске на вкладке галактики Передача атрибутов дочернему виду в сложных представлениях Не удалось найти команду com.android.camera.CropImage в android Firebase onTokenRefresh () не вызывается Строка состояния становится белой и не отображает содержимое за ней Webview в PDF игнорирует название работы Перевернутая текстура? | OpenGL-ES 2.0 (android) Ошибка студии Android Эта библиотека поддержки не должна использовать более низкую версию (19) Синхронизированный метод Java Как остановить Gradle для Android из Building * Все * Типы модулей библиотеки библиотеки на каждой сборке? Что такое authorizedEntity? Не удается найти gcm_defaultSenderId в собственном приложении. Не удается ответить на входящий вызов в android marshmallow 6.0 JQuery Мобильный фиксированный footer перемещается, когда появляется клавиатура

Android: Appcompat 21 как добавить тень на панель действий

Я добавляю новую панель действий по дизайну материала из нового appcompat, и я использую новый виджет панели инструментов. Я установил пользовательский фон на панели инструментов в xml, но моя проблема заключается в том, что тень от панели действий не отображается. Вы знаете, как это сделать?

Код панели инструментов

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="@drawable/ab_background_textured" app:theme="@style/MyTheme" app:popupTheme="@style/MyTheme.Popup"/> 

Стиль MyTheme

 <style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item> <item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item> <item name="android:textColorSecondary">#ffff8800</item> </style> 

Стиль MyTheme.Popup

 <style name="MyTheme.Popup" parent="ThemeOverlay.AppCompat.Dark"> <item name="android:textColor">#ffffff</item> </style> 

Обновить

Как @Justin Powell, я предложил добавить actionBarStyle в свою тему, но все же нет тени.

Стиль MyTheme (Обновлено)

 <style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item> <item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item> <item name="android:textColorSecondary">#ffff8800</item> <item name="android:actionBarStyle">@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse</item> </style> 

Solutions Collecting From Web of "Android: Appcompat 21 как добавить тень на панель действий"

Я нашел решение в приложении Google IO приемлемым для себя, но не видел ни одного блога или сообщения Stackoverflow, полностью объясняющего его. То, что вы можете сделать, – захватить их теневой ресурс с помощью теневого ресурса Apache 2 с https://github.com/google/iosched/blob/master/android/src/main/res/drawable-xxhdpi/bottom_shadow.9.png, а затем в Расположение вашей деятельности:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/toolbar" layout="@layout/toolbar"/> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/toolbar" android:foreground="@drawable/header_shadow"> <!-- YOUR STUFF HERE --> </FrameLayout> </RelativeLayout> 

В то время как тень заголовка

 <?xml version="1.0" encoding="utf-8"?> <resources> <item name="header_shadow" type="drawable">@drawable/bottom_shadow</item> </resources> 

Для уровней API <21. Также как https://github.com/google/iosched/blob/master/android/src/main/res/values/refs.xml и https://github.com/google/iosched/blob/master/android/ Src / main / res / values-v21 / refs.xml .

И чтобы уточнить, вот toolbar.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:elevation="4dp" app:theme="@style/ToolbarTheme" app:popupTheme="@style/AppTheme"/> 

Для макетов pre-5.0 вы можете добавить тень обратно к содержимому под панелью инструментов, добавив foreground="?android:windowContentOverlay" в FrameLayout содержимого.

Например:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" app:theme="@style/ThemeOverlay.AppCompat.ActionBar" /> <FrameLayout android:id="@+id/fragmentContainer" android:layout_width="match_parent" android:layout_height="match_parent" android:foreground="?android:windowContentOverlay" /> </LinearLayout> 

Вот как я показываю тень:

 <!-- API level 21 and above then the elevation attribute is enough. For some reason it can't be set directly on the include so I wrap it in a FrameLayout --> <FrameLayout android:id="@+id/topwrapper" android:background="@color/theme_primary" android:elevation="4dp" android:layout_width="match_parent" android:layout_height="wrap_content"> <include layout="@layout/toolbar_actionbar" /> </FrameLayout> <FrameLayout android:layout_below="@id/topwrapper" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- This topshadow is hidden in code for API level 21 and above --> <include layout="@layout/topshadow" /> </FrameLayout> 

И тогда макет верхней части выглядит так (отрегулируйте 5dp, чтобы получить желаемую высоту тени):

 <View xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="5dp" android:id="@+id/shadow_prelollipop" android:background="@drawable/background_shadow" /> 

background_shadow.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#02444444" android:endColor="#33111111" android:angle="90"></gradient> </shape> 

toolbar_actionbar.xml

 <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto" myapp:theme="@style/ActionBarThemeOverlay" myapp:popupTheme="@style/ActionBarPopupThemeOverlay" android:id="@+id/toolbar_actionbar" android:background="@color/theme_primary" myapp:titleTextAppearance="@style/ActionBar.TitleText" myapp:contentInsetStart="?actionBarInsetStart" android:layout_width="match_parent" android:layout_height="?actionBarSize" /> 

actionbar_background.xml

  <item> <shape> <solid android:color="@color/black" /> <corners android:radius="2dp" /> <gradient android:startColor="@color/black" android:centerColor="@color/black" android:endColor="@color/white" android:angle="270" /> </shape> </item> <item android:bottom="3dp" > <shape> <solid android:color="#ffffff" /> <corners android:radius="1dp" /> </shape> </item> </layer-list> 

Добавить в actionbar_style background

 <style name="Theme.ActionBar" parent="style/Widget.AppCompat.Light.ActionBar.Solid"> <item name="background">@drawable/actionbar_background</item> <item name="android:elevation">0dp</item> <item name="android:windowContentOverlay">@null</item> <item name="android:layout_marginBottom">5dp</item> <item name="logo">@drawable/ab_logo</item> <item name="displayOptions">useLogo|showHome|showTitle|showCustom</item> </style> 

Добавить в Basetheme

  <style name="BaseTheme" parent="Theme.AppCompat.Light"> <item name="android:homeAsUpIndicator">@drawable/home_back</item> <item name="actionBarStyle">@style/TFKBTheme.ActionBar</item> </style>