在设计支持库中使用AppBarLayout
窗口小部件时,工具栏底部会显示阴影。如何删除阴影?
答案 0 :(得分:180)
只需在“AppBarLayout”中使用@tailrec
即可删除阴影。它一直对我有用。希望它适合你。
答案 1 :(得分:35)
当api版本> = 21时出现此问题,如果您不想更改高程,可以使用:
appBar.setOutlineProvider(null);
记得检查api版本
编辑:
Blow是setOutlineProvider
的源代码。
/**
* Sets the {@link ViewOutlineProvider} of the view, which generates the Outline that defines
* the shape of the shadow it casts, and enables outline clipping.
* <p>
* The default ViewOutlineProvider, {@link ViewOutlineProvider#BACKGROUND}, queries the Outline
* from the View's background drawable, via {@link Drawable#getOutline(Outline)}. Changing the
* outline provider with this method allows this behavior to be overridden.
* <p>
* If the ViewOutlineProvider is null, if querying it for an outline returns false,
* or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.
* <p>
* Only outlines that return true from {@link Outline#canClip()} may be used for clipping.
*
* @see #setClipToOutline(boolean)
* @see #getClipToOutline()
* @see #getOutlineProvider()
*/
public void setOutlineProvider(ViewOutlineProvider provider) {
mOutlineProvider = provider;
invalidateOutline();
}
据说If the ViewOutlineProvider is null, if querying it for an outline returns false, or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.
所以,如果你想删除阴影,你最好使用这种方法而不是设置app:elevation
。似乎更改高程去除阴影是一种副作用。在某些情况下,更改高程可能会导致其他一些问题。
答案 2 :(得分:8)
使用最新的appcompat版本,xml中的技巧设置app:elevation="0.1dp"
不再起作用。
到目前为止,我找到了两种解决方案。
尝试使用stateListAnimator,而不是设置app:elevation
。例如,在代码中:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
StateListAnimator stateListAnimator = new StateListAnimator();
stateListAnimator.addState(new int[0], ObjectAnimator.ofFloat(appBarLayout, "elevation", 0.1f));
appBarLayout.setStateListAnimator(stateListAnimator);
}
更简单的方法是在xml中正常设置app:elevation="0dp"
,但在代码中:
appBarLayout.bringToFront();
归功于这两个讨论:
ToolBar disappears when setting elevation for AppBarLayout
when set app:elevation="0dp" then hamburgermenu not showing to toolbar
答案 3 :(得分:6)
对于所有不想使用bringToFront()
和elevation="0dp"
的人,工具栏会消失:
app:elevation="0dp"
结合的 android:translationZ="0.1dp"
为我工作。
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
app:elevation="0dp"
android:translationZ="0.1dp"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@null"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
答案 4 :(得分:2)
我尝试app:elevation="0dp"
,但工具栏消失了,但使用app:elevation="0.1dp"
就成了伎俩。
希望这有助于其他人。
答案 5 :(得分:1)
添加app:elevation =&#34; 0dp&#34;在你的AppBarLayout上。像这个例子
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
答案 6 :(得分:1)
使用android:stateListAnimator="@null"
。没有副作用。
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:stateListAnimator="@null"
>
答案 7 :(得分:0)
这就是我提出app:elevation="0dp"
删除阴影的方式。完美无缺。
答案 8 :(得分:0)
以编程方式,您可以使用此: getSupportActionBar()setElevation(0.0F);
答案 9 :(得分:0)