[java] Android에서 플로팅 액션 버튼 색상 변경

머티리얼의 플로팅 액션 버튼 색상을 변경하려고했지만 성공하지 못했습니다.

<android.support.design.widget.FloatingActionButton
    android:id="@+id/profile_edit_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="16dp"
    android:clickable="true"
    android:src="@drawable/ic_mode_edit_white_24dp" />

나는 추가하려고 노력했다 :

android:background="@color/mycolor"

또는 코드를 통해 :

FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));

또는

fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));

그러나 위의 어느 것도 효과가 없었습니다. 또한 제안 된 중복 질문에서 해결책을 시도했지만 그중 아무것도 작동하지 않습니다. 버튼은 녹색으로 유지되었고 정사각형이되었습니다.

추신 : 잔물결 효과를 추가하는 방법을 아는 것도 좋을 것입니다.



답변

문서에 설명 된대로 기본적으로 styles.xml 속성 colorAccent에 설정된 색상이 사용됩니다 .

이보기의 배경색은 테마의 colorAccent로 기본 설정됩니다. 런타임에이를 변경하려면 setBackgroundTintList (ColorStateList)를 통해 변경할 수 있습니다.

색상을 변경하려면

  • app : backgroundTint 속성을 가진 XML로
<android.support.design.widget.FloatingActionButton
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_add"
    app:backgroundTint="@color/orange"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:fabSize="normal" >
  • 와 코드 .setBackgroundTintList (아래의 답변을 ywwynm )

의견에서 @Dantalian이 언급했듯이 Design Support Library의 아이콘 색상 을 v22 (포함) 로 변경하려면 다음을 사용할 수 있습니다

android:tint="@color/white"     

v23 이후의 디자인 지원 라이브러리의 경우 다음을 사용할 수 있습니다.

app:tint="@color/white"   

또한 androidX라이브러리를 사용하면 XML 레이아웃에서 0dp 테두리를 설정해야합니다.

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_add"
    app:backgroundTint="@color/orange"
    app:borderWidth="0dp"
    app:elevation="6dp"
    app:fabSize="normal" />


답변

Vijet Badigannavar의 답변은 정확하지만 사용 ColorStateList은 일반적으로 복잡하며 사용 방법을 알려주지 않았습니다. 우리는 종종 View정상 상태와 압축 상태에서 색상 을 변경하는 데 집중하기 때문에 더 자세한 내용을 추가 할 것입니다.

  1. FAB정상 상태에서 색상 을 변경하려면 다음 과 같이 작성하면됩니다.

    mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
  2. PressedFAB 상태에서 색상 을 변경하려면 Design Support Library 22.2.1 덕분에 작성하면됩니다.

    mFab.setRippleColor(your color in int);

    이 속성을 설정하면을 길게 누르면 FAB색상이있는 잔물결이 터치 포인트에 나타나고의 전체 표면에 나타납니다 FAB. FAB정상적인 상태에서는 색상이 변경되지 않습니다 . API 21 (Lollipop) 아래에서는 잔물결 효과 FAB가 없지만를 누르면 색상이 계속 변경됩니다.

마지막으로, 상태에 대해 더 복잡한 효과를 구현하려면을 깊이 파고 들어야합니다. 다음 ColorStateList은 SO 질문입니다. 프로그래밍 방식으로 ColorStateList를 어떻게 작성합니까? .

업데이트 :
@Kaitlyn의 의견에 감사드립니다. backgroundTint를 색상으로 사용하여 FAB의 획을 제거하려면 app:borderWidth="0dp"xml에서 설정할 수 있습니다 .


답변

으로 바실 Valchev이 코멘트에서 언급이보기보다 간단하지만 내 XML에 몰래되지 않았 음을 미묘한 차이가있다.

<android.support.design.widget.FloatingActionButton
    android:id="@+id/profile_edit_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="16dp"
    android:clickable="true"
    android:src="@drawable/ic_mode_edit_white_24dp"
    app:backgroundTint="@android:color/white"/>

다음과 같습니다.

app:backgroundTint="@android:color/white"

그리고 아닙니다

android:backgroundTint="@android:color/white"


답변

앱을 사용하여 FAB의 색상을 변경하려고하면 몇 가지 문제가 있습니다. 버튼의 프레임은 색상이 다르므로 수행해야 할 작업 :

app:backgroundTint="@android:color/transparent"

코드에서 색상을 설정하십시오.

actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));


답변

그냥 사용하세요

app:backgroundTint="@color/colorPrimary"

사용하지 마십시오

android:backgroundTint="@color/colorPrimary"


답변

FAB는에 따라 색상이 지정됩니다 colorAccent.

<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
    <item name="colorAccent">@color/accent</item>
</style>


답변

mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));