删除AppBarLayout小部件android下面的阴影

时间:2015-08-21 06:35:11

标签: android android-layout

在设计支持库中使用AppBarLayout窗口小部件时,工具栏底部会显示阴影。如何删除阴影?

10 个答案:

答案 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"不再起作用。

到目前为止,我找到了两种解决方案。

  1. 尝试使用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);
    }
    
  2. 更简单的方法是在xml中正常设置app:elevation="0dp",但在代码中:

    appBarLayout.bringToFront();
    
  3. 归功于这两个讨论:

    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)

我在 Kotlin minSdkVersion 21 上使用 AppBarLayout & TabLayout 执行此操作,因此:app:elevation="0dp" 确实帮助我解决了阴影问题,但使用此解决方案使其无法按下 TabLayout 上的按钮.

因此结合 app:elevation="0.1dp"app:elevation="0dp" 我可以修复阴影并且仍然能够与我的标签布局进行交互。

enter image description here