使用工具栏时阴影不起作用(Lollipop appcompat-v7)

时间:2014-10-29 20:32:51

标签: android

如您所知,Elevation不适用于Pre-Lollipop设备。因此,appcompat-v7中的默认App Bar使用“伪阴影”纹理,我喜欢称之为模拟阴影。我的问题是我需要使用自定义工具栏。当我使用自定义工具栏时,不存在“伪阴影”。所以它看起来很平坦。知道如何添加阴影吗?有些人在其他论坛上说过添加一个前景为“android:windowContentOverlay”的FrameLayout,它以某种方式与ToolBar重叠。遗憾的是,我还没有找到任何办法让这项工作得以实现。出于某种原因,在我的测试中,“android:windowContentOverlay”无论如何都是隐形的。不知道我做错了什么。 :/

以下是我的工具栏的布局XML数据:

<android.support.v7.widget.Toolbar
    android:id="@+id/my_awesome_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

以下是默认AppCompat AppBar的样子:http://imgur.com/0EiE1Vv

以下是自定义工具栏的外观:http://imgur.com/GGEC6Tq

编辑:在alanv的帮助下,我想出了如何在工具栏下面制作阴影。但是,它与AppCompat中的默认设置不同。它只是一个微弱的阴影,如果我没记错的话,它与旧版本中使用的阴影资源相同。我正在努力寻找默认AppCompat栏的资源。

4 个答案:

答案 0 :(得分:1)

您将把它放在工具栏下。

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <View
        android:layout_width="match_parent"
        android:layout_height="5dp"
        android:background="@drawable/toolbar_shadow" />
</FrameLayout>

@绘制/ toolbar_shadow:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
    android:startColor="@android:color/transparent"
    android:endColor="#88333333"
    android:angle="90"/>
</shape>

答案 1 :(得分:1)

我建议您使用两种不同的布局(一种用于版本21,一种用于所有其他布局)并使用以下方式将它们包含在布局中:

<include layout="@layout/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

示例:https://gist.github.com/P0T4T0x/fbd2151bb40d3bd635d0

答案 2 :(得分:1)

要在工具栏下显示阴影,请使用Google Android设计支持库中提供的AppBarLayout。以下是如何使用它的示例。

<android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
   <android.support.v7.widget.Toolbar
            android:layout_height="?attr/actionBarSize"
            android:layout_width="match_parent"/>
     </android.support.design.widget.AppBarLayout>

要使用Google Android设计支持库,请在build.gradle文件中输入以下内容:

 compile 'com.android.support:design:22.2.0'

答案 3 :(得分:0)

我只有一个自定义的XML阴影,ImageView

    <ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/shadow"
android:layout_height="@dimen/shadow_height"
android:layout_width="match_parent"
android:src="@drawable/shadow_shape"
    />

及其可绘制文件夹中的图像资源shadow_shape.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="@color/shadow"
    android:endColor="@color/transparent"
    android:angle="-90" />
</shape>

根据您的需要修改@dimen/shadow_height@color/shadow可以获得非常好的结果(较暗的@color/shadow&amp;视图越高,假冒高程越高)。它不是原生的,但非常可定制。