programing

Android 지원 디자인 라이브러리와 함께 제공되는 FAB에 그림자를 추가하는 방법은 무엇입니까?

shortcode 2021. 1. 17. 11:18
반응형

Android 지원 디자인 라이브러리와 함께 제공되는 FAB에 그림자를 추가하는 방법은 무엇입니까?


제목은 꽤 자명하다.

다음 코드는 플로팅 작업 버튼 아래에 그림자를 렌더링하지 않습니다. 그림자를 렌더링하려면 어떻게해야합니까? 이 기능은 API 21 이상에서도 실제로 지원되지 않습니까?

<android.support.design.widget.FloatingActionButton
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/ic_add"
    android:clickable="true" />

참고 : 추가 android:elevation는 API 21에 그림자를 추가 하지 않습니다.

예시 스크린 샷

dandar3의 예제에서 가져온 스크린 샷 : https://github.com/dandar3/android-support-design


간단히 설정하면 app:borderWidth="0dp"이 문제가 해결됩니다.

참고 :xmlns:app="http://schemas.android.com/apk/res-auto" 루트 레이아웃 에 추가 하는 것을 잊지 마십시오 .

문제 는 Android 디자인 라이브러리의 다음 릴리스에서 수정되어야합니다.


API 21+의 경우 app:borderWidth="0dp"app:elevation="[number]dp". 원하는 그림자 크기를 제공하는 고도 설정 :

매개 변수 "고도"값의 예

다음은 API 21+ 용 코드의 예입니다.

<android.support.design.widget.FloatingActionButton
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/locate_user_FAB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/location_off"
    app:elevation="6dp"
    app:borderWidth="0dp"
    android:layout_above="@+id/take_taxi_FAB"
    app:backgroundTint="@color/colorAccentGrey">

21 이하의 API (Android 4)에서 기억해야 할 중요한 사항 중 하나는 호환성 측면에서 FAB가 버튼 주위에 여백을 두어 그림자를 그립니다. 그런 다음 그렇게해야합니다 (현재이 코드를 사용하고 있으며 작동합니다).

<android.support.design.widget.FloatingActionButton
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/locate_user_FAB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/location_off"
    app:elevation="6dp"
    app:borderWidth="0dp"
    android:layout_above="@+id/take_taxi_FAB"
    android:layout_alignParentRight="true"
    android:layout_marginRight="@dimen/map_FAB_marginRight"
    android:layout_marginBottom="@dimen/locate_user_FAB_marginBottom"
    app:backgroundTint="@color/colorAccentGrey">

나는 xmlns:app="http://schemas.android.com/apk/res-auto"XML의 시작 부분에 넣는 것을 선호 하지만, 여러분에게 상기시키기 위해 여기에 넣었습니다.]


이 같은 문제가 발생했으며 AndroidManifest.xml에서이 태그를 삭제하여 작동하게했습니다.

android:hardwareAccelerated="false"

처음에는과 함께 추가했습니다 android:largeHeap="true". 표시된 곳에 많은 포인트가있는 HeatMap에 필요하다고 생각했기 때문에 android:largeHeap="true".


이것이 여전히 일부에서 작동하지 않는다면 다음 사이에 상당한 차이가 있습니다.

app:elevation="6dp"
app:borderWidth="0dp"

app:borderWidth="0dp"
app:elevation="6dp"

순서는 어떤 이유로 중요해 보이며 (첫 번째 순서는 작동하고 두 번째는 작동하지 않음) 지원 라이브러리 23.3.0에서 가져온 것입니다.


프로젝트 또는 애플리케이션 태그의 라이브러리에서 매니페스트를 확인하고 삭제 합니다.

android:hardwareAccelerated="false"
android:largeHeap="true"

그러나 이러한 옵션이 필요한 경우 그림자 및 변형 애니메이션이 작동하지 않습니다.


도움이된다면 나는 사용하고 있었다

android:tint="@color/myColor"

대신에

android:backgroundTint="@color/myColor".

색조를 backgroundTint로 대체하면 그림자가 다시 나타납니다.

참조 URL : https://stackoverflow.com/questions/30532863/how-to-add-shadow-to-the-fab-provided-with-the-android-support-design-library

반응형