以编程方式从 Appcompat 22.2.0 更改浮动操作按钮的颜色

Posted

技术标签:

【中文标题】以编程方式从 Appcompat 22.2.0 更改浮动操作按钮的颜色【英文标题】:Change color of Floating Action Button from Appcompat 22.2.0 programmatically 【发布时间】:2015-09-07 02:15:40 【问题描述】:

我想知道如何更改支持库 22.2.0 中的浮动操作按钮颜色? 我试过了

button.setBackgroundColor(color);

但很明显,这会改变按钮的可绘制对象并变成正方形。

现在我想知道如何改变颜色,而只是改变颜色,而不触及形状?

提前致谢

【问题讨论】:

这里是answer 【参考方案1】:

有时您在颜色文件中获得了您的颜色并且您想使用那个。

下面的代码你可以做什么

fab.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor(getString(R.color.youcolor))));

如您所知,要以编程方式更改它,您需要使用setBackgroundTintList(),然后传递所需的ColorStateList.valueOf(),这个需要一个特定的整数并解析它......

注意:如果您只是立即输入 int 颜色,有时可能会给您带来无法获得所需颜色的问题,因此我不使用它,也不建议这样使用它

然后放入ColorStateList.valueOf()Color.parseColor() 这就是你需要放入的...

这需要一个字符串,但你在颜色文件中有 int 颜色,那该怎么办?

Color.parseColor() 内传递getString(),这是每个活动都有的方法,所以在getString() 内你把最后你的颜色作为R.color.yourcolor

【讨论】:

【参考方案2】:

XML background:tint 颜色将始终覆盖您提供的任何颜色 以编程方式。因此,要以编程方式提供颜色,请从 XML 文件中删除 android:backgroundTint="#96989A" 行并使用:

button.setBackgroundTintList(getResources().getColorStateList(R.color.yourColor));

【讨论】:

【参考方案3】:

试试这个代码。它将为背景资源添加色调。

button.setBackgroundTintList(getResources().getColorStateList(R.color.yourColor));

【讨论】:

【参考方案4】:

要做到这一点向后兼容:

DrawableCompat.setTintList(DrawableCompat.wrap(fab.getDrawable()), tintColor); // <- icon
DrawableCompat.setTintList(DrawableCompat.wrap(fab.getBackground()), backgroundTintColor); // <- background

【讨论】:

【参考方案5】:

只需在浮动操作按钮下的 xml 文件中使用这一行

android:backgroundTint="#96989A"

【讨论】:

这不是“以编程方式”【参考方案6】:

方法一:改变xml中浮动操作栏(fab)的颜色:

要更改浮动操作栏(fab)的颜色,只需按照此步骤操作

只需在浮动操作栏(fab)的 xml 中添加“app:backgroundTint="#colorcode"” ..例如

app:backgroundTint="#8393ca"

在#8393ca 的地方添加你想要的任何颜色代码

使用示例..

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_
    android:layout_
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    app:backgroundTint="#8393ca"
    android:src="@drawable/send" />

方法 2:以编程方式更改浮动操作栏颜色

只需在您的代码中添加这一行

首先在你的 values=>colors 中创建一个红色,然后在你的创建活动中添加这个代码

fab.setBackgroundTintList(getResources().getColorStateList(R.color.red));

                                or

fab.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#33691E")));

学分:http://androidrace.com/2016/12/12/how-to-change-fabfloating-action-bar-color-android/

【讨论】:

这也将文本颜色更改为相同的背景颜色。如何避免它或像#FFF一样更改文本颜色? 我注意到如果您使用的是可绘制图标,这也会将您删除。【参考方案7】:

也许晚了,但可以提供帮助。

 fab.setBackgroundTintList(ColorStateList.valueOf(Color
                    .parseColor("#33691E")));

并从颜色列表中解析实际颜色代码You can find here

【讨论】:

只是补充一点:如果您不想使用硬编码的字符串颜色值,而是引用存储在您的 colors.xml 中的颜色,您可以使用以下内容:fab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(getActivity(), R.color.white))); 【参考方案8】:

你必须使用

在 XML 中与attribute app:backgroundTint 在带有 .setBackgroundTintList 的代码中 阅读这个答案

Android changing Floating Action Button color

【讨论】:

谢谢。它对我有帮助。【参考方案9】:

如果您使用来自https://github.com/Clans/FloatingActionButton 的浮动操作按钮库,请使用此

fab.setColorNormal(getResources().getColor(R.color.fab_color1));

【讨论】:

【参考方案10】:

在此处查看接受的答案:Android changing Floating Action Button color

如果你想改变颜色

在带有 app:backgroundTint 属性的 XML 中 在带有 .setBackgroundTintList 的代码中

【讨论】:

这仅来自 API 级别 21。 @marienke 你确定在 API 21 以下测试时使用了 xml 中的 app 命名空间吗? @LouisCAD ***.com/questions/44108455/… 你要求的 :) @marienke 您只想在 xml 中使用 ColorStateList,使用代码中的 setEnabled(isNfcEnabled) 使其使用 ColorStateList xml 文件中的正确颜色。 @marienke 然后,查看CheckedTextView 源代码以使您的FAB 子类具有您将在ColorStateList 中使用的checked 状态。然后,您只需在 NFC 打开或关闭时以编程方式更改 FAB 的检查状态,可能使用setChecked(...) 方法。【参考方案11】:

colors.xml(本例中为R.color.purple)中创建一个颜色资源并像这样使用它:

floatingActionButton.setBackgroundTintList(getResources().getColorStateList(R.color.purple));

【讨论】:

请考虑为您的代码附上解释性文字,以帮助未来的读者。【参考方案12】:

创建一个ColorStateList 并将其设置为背景色:

button.setBackgroundTintList(new ColorStateList(new int[][]new int[]0, new int[]color));

【讨论】:

颜色是动态设置的,所以不能有xml资源文件 然后动态创建颜色状态列表? 基于问题,假设button 是android.support.design.widget.FloatingActionButton。这意味着它将仅限于 v7。 或者只是ColorStateList.valueOf(color),来自:***.com/a/32031019/1773325 注意:如果以编程方式设置背景颜色,请不要在 XML 中设置任何与背景颜色相关的属性。刚刚发现 XML 默认值总是会覆盖代码中的任何运行时更改的艰难方式(奇怪)。【参考方案13】:

属性名称为backgroundTint

所以我认为有一个名为

的函数

button.setBackgroundTint(color)

【讨论】:

以上是关于以编程方式从 Appcompat 22.2.0 更改浮动操作按钮的颜色的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从 Appcompat 22.2.0 更改浮动操作按钮的颜色

如何以编程方式将视图的底部约束从安全区域更改为超级视图?

如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton

iOS:以编程方式将通知设置从“从不请求”更改为“拒绝”

以编程方式将 EditText 的输入类型从 PASSWORD 更改为 NORMAL,反之亦然

Jetpack Compose:如何以编程方式将主题从浅色模式更改为深色模式 onClick