设置 FAB 图标颜色
Set FAB icon color
当前 FAB
我想知道如何将 'com.android.support:design:22.2.0' 库提供的 FAB(浮动操作按钮)小部件的图标颜色从绿色更改为白色。
style.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryDark">@color/color_primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
<color name="color_primary">#00B33C</color>
<color name="color_primary_dark">#006622</color>
<color name="accent">#FFB366</color>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include android:id="@+id/toolbar" layout="@layout/toolbar" />
<TextView android:id="@+id/text"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:paddingTop="16dp"
android:textSize="20sp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp"
android:paddingBottom="16dp" />
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:src="@android:drawable/ic_input_add"
android:layout_margin="24dp"
app:elevation="6dp"
app:pressedTranslationZ="12dp"
app:borderWidth="0dp" />
更新 2
如果您使用 com.google.android.material.floatingactionbutton.FloatingActionButton
,请使用 app:tint
app:tint="@android:color/white"
更新
参考@Saleem Khan 的回答,这是设置 app:tint
的标准方法,使用:
android:tint="@android:color/white"
通过 XML 在 FloatingActionButton
。
旧(2015 年 6 月)
此答案写于 2015 年 10 月之前,当时 FloatingActionButton
上的 android:tint
仅支持 API >= 21。
您可以使用 ColorFilter
以编程方式更改它。
//get the drawable
Drawable myFabSrc = getResources().getDrawable(android.R.drawable.ic_input_add);
//copy it in a new one
Drawable willBeWhite = myFabSrc.getConstantState().newDrawable();
//set the color filter, you can use also Mode.SRC_ATOP
willBeWhite.mutate().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
//set it to your fab button initialized before
myFabName.setImageDrawable(willBeWhite);
使用android:tint 属性你可以这样设置颜色
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:tint="@android:color/white"
android:src="@android:drawable/ic_input_add"
/>
使用来自 google 设计网站的 ic_add 的白色版本。
android:tint
看起来像是一个干净的解决方案,但在 API 级别 21
以下不受支持
与尝试以编程方式更改现有图标的颜色相比,使用位图为您的应用增加的复杂性要低。越低的复杂性意味着要测试的东西越少 :)
这比获取可绘制对象更容易,您只需要访问滤色器并将其设置为您想要的颜色即可。
FloatingActionButton myFab = (FloatingActionButton) findViewById(R.id.myfabid);
myFab.setColorFilter(Color.WHITE);
由于 FloatingActionButton
扩展了 ImageView
我们可以使用 ImageViewCompat
给图标着色:
ImageViewCompat.setImageTintList(
floatingActionButton,
ColorStateList.valueOf(Color.WHITE)
);
如果您正在使用 Material Components
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_gravity="bottom|end"
app:fabSize="normal"
app:tint="@color/colorAccent"
app:srcCompat="@drawable/ic_google"/>
如果要使用图标默认颜色,请更改 app:tint="@null"
如果您正在使用 material FAB,您可以在 Kotlin 中使用以下代码以编程方式设置它的样式。
fab.supportImageTintList = ContextCompat.getColorStateList(context, R.color.fab_icon_tint)
您必须更改 app:tint
才能生效。 android:tint
没有为我做任何改变。
如果您正在使用 material FAB,请使用 app:tint 来更改图标的颜色,而不是 android:tint
如果要更改 CollapsingToolbarLayout 中图标的颜色,请使用以下代码
app:tint="@color/white"
使用应用代替 Android
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/add_loan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/medium"
android:layout_marginBottom="16dp"
android:backgroundTint="@color/ci_blue"
android:theme="@style/fabtheme"
app:srcCompat="@drawable/ic_baseline_add_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintStart_toStartOf="parent"
app:rippleColor="@color/white" />
主题
<style name="fabtheme" parent="Widget.Design.FloatingActionButton">
<item name="colorOnSecondary">@color/white</item>
</style>
或
使用属性
app:tint="@color/white"
您可以自定义样式:
<style name="FloatingButton" parent="Widget.MaterialComponents.FloatingActionButton">
<item name="colorSecondary">@color/red</item>
<item name="colorOnSecondary">@color/white</item>
</style>
其中 colorSecondary 是背景,colorOnSecondary 是按钮的可绘制对象的颜色。
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_phone"
android:theme="@style/FloatingButton" />
在Java
private FloatingActionButton login;
login = findViewById(R.id.loginbtn);
login.setColorFilter(android.R.color.white);
在XML
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/loginbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorPrimaryDark"
android:src="@drawable/loginicon"
app:rippleColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/pass_l" />
如果您正在使用 com.google.android.material.floatingactionbutton.FloatingActionButton
然后
要更改浮动操作按钮的 背景颜色,请使用 app:backgroundTint
要更改浮动操作按钮的 图标颜色,请使用 app:tint
要更改浮动操作按钮的 Icon Drawable,请使用 app:srcCompat
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:backgroundTint="@color/white"
app:srcCompat="@drawable/fb_icon"
app:tint="@android:color/black" />
试试这个代码
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:backgroundTint="@color/sm_blue"
app:tint="@color/white"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_input_add" />
结果
对于API>=21
我以编程方式更改 FloatingActionButton
图标颜色的解决方案
val fab = FloatingActionButton(requireContext())
fab.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
imageTintList = ColorStateList.valueOf(Color.WHITE)
}
如果你使用Extended,设置app:iconTint
你可以这样做:
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:id="@+id/fAB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:clickable="true"
android:focusable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:icon="@drawable/d0"
app:iconTint="@color/white"
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Material3.FloatingActionButton"
tools:ignore="SpeakableTextPresentCheck" />
当前 FAB
我想知道如何将 'com.android.support:design:22.2.0' 库提供的 FAB(浮动操作按钮)小部件的图标颜色从绿色更改为白色。
style.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryDark">@color/color_primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
<color name="color_primary">#00B33C</color>
<color name="color_primary_dark">#006622</color>
<color name="accent">#FFB366</color>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include android:id="@+id/toolbar" layout="@layout/toolbar" />
<TextView android:id="@+id/text"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:paddingTop="16dp"
android:textSize="20sp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp"
android:paddingBottom="16dp" />
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:src="@android:drawable/ic_input_add"
android:layout_margin="24dp"
app:elevation="6dp"
app:pressedTranslationZ="12dp"
app:borderWidth="0dp" />
更新 2
如果您使用 com.google.android.material.floatingactionbutton.FloatingActionButton
,请使用 app:tint
app:tint="@android:color/white"
更新
参考@Saleem Khan 的回答,这是设置 app:tint
的标准方法,使用:
android:tint="@android:color/white"
通过 XML 在 FloatingActionButton
。
旧(2015 年 6 月)
此答案写于 2015 年 10 月之前,当时 FloatingActionButton
上的 android:tint
仅支持 API >= 21。
您可以使用 ColorFilter
以编程方式更改它。
//get the drawable
Drawable myFabSrc = getResources().getDrawable(android.R.drawable.ic_input_add);
//copy it in a new one
Drawable willBeWhite = myFabSrc.getConstantState().newDrawable();
//set the color filter, you can use also Mode.SRC_ATOP
willBeWhite.mutate().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
//set it to your fab button initialized before
myFabName.setImageDrawable(willBeWhite);
使用android:tint 属性你可以这样设置颜色
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:tint="@android:color/white"
android:src="@android:drawable/ic_input_add"
/>
使用来自 google 设计网站的 ic_add 的白色版本。
android:tint
看起来像是一个干净的解决方案,但在 API 级别 21
与尝试以编程方式更改现有图标的颜色相比,使用位图为您的应用增加的复杂性要低。越低的复杂性意味着要测试的东西越少 :)
这比获取可绘制对象更容易,您只需要访问滤色器并将其设置为您想要的颜色即可。
FloatingActionButton myFab = (FloatingActionButton) findViewById(R.id.myfabid);
myFab.setColorFilter(Color.WHITE);
由于 FloatingActionButton
扩展了 ImageView
我们可以使用 ImageViewCompat
给图标着色:
ImageViewCompat.setImageTintList(
floatingActionButton,
ColorStateList.valueOf(Color.WHITE)
);
如果您正在使用 Material Components
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:layout_gravity="bottom|end"
app:fabSize="normal"
app:tint="@color/colorAccent"
app:srcCompat="@drawable/ic_google"/>
如果要使用图标默认颜色,请更改 app:tint="@null"
如果您正在使用 material FAB,您可以在 Kotlin 中使用以下代码以编程方式设置它的样式。
fab.supportImageTintList = ContextCompat.getColorStateList(context, R.color.fab_icon_tint)
您必须更改 app:tint
才能生效。 android:tint
没有为我做任何改变。
如果您正在使用 material FAB,请使用 app:tint 来更改图标的颜色,而不是 android:tint
如果要更改 CollapsingToolbarLayout 中图标的颜色,请使用以下代码
app:tint="@color/white"
使用应用代替 Android
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/add_loan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/medium"
android:layout_marginBottom="16dp"
android:backgroundTint="@color/ci_blue"
android:theme="@style/fabtheme"
app:srcCompat="@drawable/ic_baseline_add_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintStart_toStartOf="parent"
app:rippleColor="@color/white" />
主题
<style name="fabtheme" parent="Widget.Design.FloatingActionButton">
<item name="colorOnSecondary">@color/white</item>
</style>
或
使用属性
app:tint="@color/white"
您可以自定义样式:
<style name="FloatingButton" parent="Widget.MaterialComponents.FloatingActionButton">
<item name="colorSecondary">@color/red</item>
<item name="colorOnSecondary">@color/white</item>
</style>
其中 colorSecondary 是背景,colorOnSecondary 是按钮的可绘制对象的颜色。
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_phone"
android:theme="@style/FloatingButton" />
在Java
private FloatingActionButton login;
login = findViewById(R.id.loginbtn);
login.setColorFilter(android.R.color.white);
在XML
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/loginbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorPrimaryDark"
android:src="@drawable/loginicon"
app:rippleColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/pass_l" />
如果您正在使用 com.google.android.material.floatingactionbutton.FloatingActionButton
然后
要更改浮动操作按钮的 背景颜色,请使用
app:backgroundTint
要更改浮动操作按钮的 图标颜色,请使用
app:tint
要更改浮动操作按钮的 Icon Drawable,请使用
app:srcCompat
<com.google.android.material.floatingactionbutton.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" app:backgroundTint="@color/white" app:srcCompat="@drawable/fb_icon" app:tint="@android:color/black" />
试试这个代码
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:backgroundTint="@color/sm_blue"
app:tint="@color/white"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_input_add" />
结果
对于API>=21
我以编程方式更改 FloatingActionButton
图标颜色的解决方案
val fab = FloatingActionButton(requireContext())
fab.apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
imageTintList = ColorStateList.valueOf(Color.WHITE)
}
如果你使用Extended,设置app:iconTint
你可以这样做:
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
android:id="@+id/fAB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:clickable="true"
android:focusable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:icon="@drawable/d0"
app:iconTint="@color/white"
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Material3.FloatingActionButton"
tools:ignore="SpeakableTextPresentCheck" />