AppBarLayout 위젯 android 아래 그림자 제거


94

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

답변:


233

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


62
android : elevation을 사용하지 마십시오. app : elevation을 사용하십시오.
radley

3
고도 설정은 L 이후에만 사용할 수 있다는 경고를받지 않고 프로그래밍 방식으로 수행 할 수있는 방법이 있습니까?
davidcv5

2
app : elevation = "0dp", 음영이 제거되었지만 이제 탭을 클릭 할 수 없습니다.
Sandeep P

8
0dp로 설정하면 툴바가 숨겨집니다.
Shajeel Afzal 2017

1
불행히도 더 이상 작동하는 대답이 아닙니다. 아래 Liu Teng 답변 참조setOutlineProvider
Matthew

49

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


API는 버전 21에서만 사용할 수 있습니다.
chakrapani

API <21로 무엇을해야합니까?
DYS

이 문제가 발생 될 때 API> = 21
리우 탱

9

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

8

최신 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"로 설정하면 햄버거 메뉴가 툴바에 표시되지 않습니다.


3

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

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

2

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

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


0.1dp도 작동하지 않고 툴바 메뉴도 숨겨집니다.
Shajeel Afzal

이 팁을 사용하여 appcompat v23.0.1로 작동하는 앱이 있습니다. 사용중인 버전은 무엇입니까?
Gueorgui Obregon

나는 v25.0.0.
Shajeel Afzal

2
업데이트 된 버전에서는 더 이상 작동하지 않는 것 같습니다 :(.
Gueorgui Obregon

2

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>

생명을 구하는 답변 :)
user2672052

1

프로그래밍 방식으로 다음을 사용할 수 있습니다. getSupportActionBar (). setElevation (0.0f);


0

이것이 제가 app:elevation="0dp"그림자를 제거 하는 방법입니다 . 완벽하게 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.