首先,我知道之前已经问过这个问题,但之前没有得到回答.我希望有人能给我一个答案.
在我的应用程序中,我使用Appcompat_v7(API 21)中的工具栏.这是我的代码:
这是我使用的ToolBar样式:
问题是,提升前棒棒糖不起作用.所以我的问题是:棒棒糖设备上的工具栏下是否有阴影?
您可以使用FrameLayout
with 添加阴影(高程)foreground="?android:windowContentOverlay"
.Lollipop前不支持elevation属性.因此,如果您正在使用FrameLayout
像片段容器那么只需添加前景属性.
由于我遇到了CardView小部件方法的问题,我使用了@Sniper提到的FrameLayout方法; 它工作得很好!
我只是想分享你必须使用的代码片段.只需将其直接放在主要内容开始的工具栏下:
<FrameLayout android:layout_ android:layout_ android:foreground="?android:windowContentOverlay">
别忘了关闭:
</FrameLayout>
使用CardView容器工具栏是个坏主意.
CardView很重,尤其适用于低端设备.
最好的方法是在工具栏下方放置一个渐变阴影视图.阴影视图必须是协调器布局的直接子视图.即.包含工具栏和阴影视图的appbar必须是兄弟姐妹.
将此视图组件添加到布局中.
<View android:id="@+id/gradientShadow" android:layout_ android:layout_ android:background="@drawable/toolbar_shadow" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_collapseMode="pin"/>
可绘制的toolbar_shadow.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:angle="90" android:endColor="#33333333" android:startColor="@android:color/transparent"/> </shape>
这将解决前棒棒糖设备中的问题.但是我们不希望在棒棒糖和上面的设备中出现这种阴影,因此可以通过棒棒糖及以上设备实现可视性.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { findViewById(R.id.gradientShadow).setVisibility(View.GONE); }
完成.
我正在使用这个答案:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_ android:layout_ android:orientation="vertical"> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_ android:layout_ android:background="@color/orange" android:titleTextAppearance="@color/White" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> <View android:layout_ android:layout_ android:background="@drawable/toolbar_shadow" /> </LinearLayout>
toolbar_shadow.xml:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#3f3f3f" android:endColor="@android:color/transparent" android:angle="270" /> </shape>
它可以有真实的阴影 - 动画和生成.Lollipop使用的方法自Froyo开始提供.我认为Honeycomb用于阴影生成的硬件加速可用.以下是它的工作原理:
将您的视图绘制到一个离线位图,并将LightingColorFilter设置为0,0
使用ScriptIntrinsicBlur类和高程值作为半径来模糊黑色形状(屏幕外位图)
在视图下方绘制位图
它需要添加自定义高程属性,能够渲染阴影的自定义视图,以及使用渲染脚本和兼容性库(对于旧设备).我不打算深入研究细节,因为其中很多都包括编译和次要性能优化问题.但这是可能的.
为什么官方支持库中没有阴影?
它需要在UI框架中进行更改,因为无法自由绘制外部视图边界
平滑动画需要相当不错的GPU
看到:
https://www.youtube.com/watch?v=jbU4SXblO5s
https://androidreclib.wordpress.com/2014/11/25/lollipops-shadows-on-gingerbread/
https://github.com/ZieIony/Carbon
这对我非常有用:
<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_ android:layout_ android:background="@color/primary" card_view:cardElevation="4dp" card_view:cardCornerRadius="0dp"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_ android:layout_ android:background="@color/primary" android:min /> </android.support.v7.widget.CardView>