Android FloatingActionButton 中的淡色图标
Android tint icon in FloatingActionButton
如何为 FloatingActionButton 中的图标资源图像着色?我已经尝试 favoriteFab.setColorFilter(R.color.yellow, PorterDuff.Mode.OVERLAY);
但没有成功。
如果您使用 API 21 或更高版本,您可以像这样设置可绘制对象的色调。
mFAB.getDrawable().mutate().setTint(getResources().getColor(R.color.yourColor));
例如
mFAB = (FloatingActionButton) findViewById(R.id.fab);
mFAB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar.make(v, "Yummy snackbar", LENGHT_LONG).show();
}
});
mFAB.getDrawable().mutate().setTint(getResources().getColor(R.color.colorAccent));
更新: 由于 getColor 已被弃用,您应该改用 ContextCompat。使用以下内容,例如:
mFAB.getDrawable().mutate().setTint(ContextCompat.getColor(this, R.color.colorAccent));
Drawable fabDr= mFAB.getDrawable();
DrawableCompat.setTint(fabDr, Color.WHITE);
您可以简单地使用 support-v4 中的 DrawableCompat 如下:
Drawable drawable = mFloatingActionButton.getDrawable();
// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);
// We can now set a tint
DrawableCompat.setTint(drawable, ContextCompat.getColor(this, R.color.white));
// ...or a tint list
DrawableCompat.setTintList(drawable, ColorStateList.valueOf(ContextCompat.getColor(this, R.color.white)));
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
我假设 favoriteFab 是您的 FloatingActionButton。您可以使用:
int color = ContextCompat.getColor(this, R.color.yellow);
favoriteFab.getDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
您可以使用 DrawableCompat.setTintList()
代替:
Drawable drawable = DrawableCompat.wrap(fab.getDrawable());
DrawableCompat.setTint(drawable, myColorInt);
fab.setImageDrawable(drawable);
或者在 Kotlin 中更好
import androidx.core.graphics.drawable.DrawableCompat.setTint
import com.google.android.material.floatingactionbutton.FloatingActionButton
fun FloatingActionButton.iconTint(color: Int) = setTint(drawable, color)
可以使用:
app:tint="#FFFF"
示例:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|start"
android:layout_margin="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:backgroundTint="@color/colorAccent"
app:fabSize="normal"
app:rippleColor="@color/colorPrimaryDark"
app:tint="#FFFF"
android:src="@drawable/ic_search_24dp"
/>
如何为 FloatingActionButton 中的图标资源图像着色?我已经尝试 favoriteFab.setColorFilter(R.color.yellow, PorterDuff.Mode.OVERLAY);
但没有成功。
如果您使用 API 21 或更高版本,您可以像这样设置可绘制对象的色调。
mFAB.getDrawable().mutate().setTint(getResources().getColor(R.color.yourColor));
例如
mFAB = (FloatingActionButton) findViewById(R.id.fab);
mFAB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar.make(v, "Yummy snackbar", LENGHT_LONG).show();
}
});
mFAB.getDrawable().mutate().setTint(getResources().getColor(R.color.colorAccent));
更新: 由于 getColor 已被弃用,您应该改用 ContextCompat。使用以下内容,例如:
mFAB.getDrawable().mutate().setTint(ContextCompat.getColor(this, R.color.colorAccent));
Drawable fabDr= mFAB.getDrawable();
DrawableCompat.setTint(fabDr, Color.WHITE);
您可以简单地使用 support-v4 中的 DrawableCompat 如下:
Drawable drawable = mFloatingActionButton.getDrawable();
// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);
// We can now set a tint
DrawableCompat.setTint(drawable, ContextCompat.getColor(this, R.color.white));
// ...or a tint list
DrawableCompat.setTintList(drawable, ColorStateList.valueOf(ContextCompat.getColor(this, R.color.white)));
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
我假设 favoriteFab 是您的 FloatingActionButton。您可以使用:
int color = ContextCompat.getColor(this, R.color.yellow);
favoriteFab.getDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN);
您可以使用 DrawableCompat.setTintList()
代替:
Drawable drawable = DrawableCompat.wrap(fab.getDrawable());
DrawableCompat.setTint(drawable, myColorInt);
fab.setImageDrawable(drawable);
或者在 Kotlin 中更好
import androidx.core.graphics.drawable.DrawableCompat.setTint
import com.google.android.material.floatingactionbutton.FloatingActionButton
fun FloatingActionButton.iconTint(color: Int) = setTint(drawable, color)
可以使用:
app:tint="#FFFF"
示例:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|start"
android:layout_margin="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:backgroundTint="@color/colorAccent"
app:fabSize="normal"
app:rippleColor="@color/colorPrimaryDark"
app:tint="#FFFF"
android:src="@drawable/ic_search_24dp"
/>