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

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

button.setBackgroundColor(color);

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

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

提前致谢

【问题讨论】:

标签: java android android-layout floating-action-button


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

            属性名称为backgroundTint

            所以我认为有一个名为

            的函数

            button.setBackgroundTint(color)

            【讨论】:

              猜你喜欢
              • 2015-09-07
              • 1970-01-01
              • 2010-12-21
              • 2016-06-21
              • 1970-01-01
              • 2018-12-11
              • 2021-11-24
              相关资源
              最近更新 更多