新しい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>
Google IOアプリで解決策が自分で受け入れられることがわかりましたが、ブログやStackoverflowの投稿で完全に説明されているものは見当たりませんでした。 https://github.com/google/iosched/blob/36d88985ff6813fa9035530cd426393720a6f7b4/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/8c798c58e592b8a25111610e216c7f3ee74c3a42/Android/src/main/res/values/refs.xml および https://github.com /google/iosched/blob/8c798c58e592b8a25111610e216c7f3ee74c3a42/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"/>
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>
そして、topshadowレイアウトは次のようになります(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背景に追加
<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>