[android] AppBarLayout 위젯 android 아래 그림자 제거

AppBarLayout디자인 지원 라이브러리에서 위젯 사용시 툴바 하단에 그림자가 나타납니다. 그 그림자를 어떻게 제거 할 수 있습니까?



답변

app:elevation="0dp"“AppBarLayout”내부를 사용 하여 그림자를 제거하십시오. 그것은 항상 나를 위해 일했습니다. 그것이 당신을 위해 작동하기를 바랍니다.


답변

이 문제는 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. 그림자를 제거하기 위해 고도를 변경하는 것은 일종의 부작용 인 것 같습니다. 그리고 고도를 변경하면 경우에 따라 다른 문제가 발생할 수 있습니다.


답변

사용하지 않는 사람들 모두 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>


답변

최신 appcompat 버전에서는 app:elevation="0.1dp"xml 의 트릭 설정 이 더 이상 작동하지 않습니다.

지금까지 두 가지 해결책을 찾았습니다.

  1. 을 설정하는 대신 app:elevationstateListAnimator를 사용하십시오. 예를 들어, 코드에서 :

    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. 더 쉬운 방법은 여전히 app:elevation="0dp"xml에서 정상적으로 설정하는 것 입니다.

    appBarLayout.bringToFront();

신용은 다음 두 가지 토론으로 이동합니다.

AppBarLayout에 대한 고도를 설정할 때 ToolBar가 사라집니다.

app : elevation = “0dp”로 설정하면 햄버거 메뉴가 툴바에 표시되지 않습니다.


답변

사용 android:stateListAnimator="@null". 부작용이 없습니다.

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:stateListAnimator="@null"
    >


답변

시도 app:elevation="0dp"했지만 도구 모음이 사라졌지 만 사용 app:elevation="0.1dp"하여 트릭 을 만들었습니다.

이것이 다른 사람에게 도움이되기를 바랍니다.


답변

AppBarLayout에 app : elevation = “0dp”를 추가합니다. 이 예처럼

<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>