머티리얼의 플로팅 액션 버튼 색상을 변경하려고했지만 성공하지 못했습니다.
<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
정상 상태와 압축 상태에서 색상 을 변경하는 데 집중하기 때문에 더 자세한 내용을 추가 할 것입니다.
-
FAB
정상 상태에서 색상 을 변경하려면 다음 과 같이 작성하면됩니다.mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
-
Pressed
FAB
상태에서 색상 을 변경하려면 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)));