我从新的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>
答案 0 :(得分:34)
我发现Google IO应用中的解决方案对我自己来说是可以接受的,但是没有看到博客或Stackoverflow文章对此进行全面解释。您可以做的是从https://github.com/google/iosched/blob/36d88985ff6813fa9035530cd426393720a6f7b4/android/src/main/res/drawable-xxhdpi/bottom_shadow.9.png获取他们的Apache 2许可抽屉影子资产,然后在您的活动布局中:
<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级别&lt; 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"/>
答案 1 :(得分:30)
对于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>
答案 2 :(得分:12)
这就是我展示阴影的方式:
<!-- 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" />
答案 3 :(得分:0)
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>