android:从代码动态更改FAB(浮动操作按钮)图标

Posted

技术标签:

【中文标题】android:从代码动态更改FAB(浮动操作按钮)图标【英文标题】:android: dynamically change FAB(Floating Action Button) icon from code 【发布时间】:2016-01-13 10:46:48 【问题描述】:

如何在运行时更改 Activity 中的 FAB 图标。我有这个代码->

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fabMainActivity);

我知道使用 fab.setBackgroundDrawable(); 可以做到这一点,但我是 android 新手,不明白如何做到这一点。

我们将不胜感激。

谢谢

【问题讨论】:

你试过fab. setBackground吗? 我无法做到这一点..因为它期望一个可绘制的..并且我知道如何制作一个可绘制的?? 你在 Drawable 文件夹中添加了图标吗?如果是,则只需将R.drawable.<icon_name> 传递给setBackground 方法,否则首先将图标添加到可绘制文件夹,然后执行相同操作 R.drawable.<icon_name> 传递给fab.setBackgroundDrawable(); 会出错...setBackgroundDrawable (android.graphics.drawable.Drawable) in FloatingActionButton can not be applied to (int) 好吧:Drawable drawable = getResources().getDrawable(R.drawable. icon_name); fab .setBackground(drawable)l 【参考方案1】:

更改 FloatingActionButton 来源:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
            floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_full_sad, context.getTheme()));
         else 
            floatingActionButton.setImageDrawable(getResources().getDrawable(R.drawable.ic_full_sad));
    

这可以替换为支持库中的以下代码:

floatingActionButton.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_full_sad));

【讨论】:

尽量避免getApplicationContext @zozelfelfo 为什么会这样? 这不一定是真的。这取决于您要完成的工作。活动上下文可能会导致内存泄漏,具体取决于您使用它的方式。通常,麻烦的是活动上下文,因为它可能导致内存泄漏。如果活动终止并且另一个对象通过上下文引用了该活动,则它不能被垃圾收集。但是,在某些情况下,您希望在应用上下文 ex 上使用活动上下文。 如何以编程方式将图标设置为扩展 FAB?【参考方案2】:

如果您使用的是支持库:

floatingActionButton.setImageResource(R.drawable.icon_name)

【讨论】:

这应该是标记的答案,因为这样可以使用向量【参考方案3】:

或者您使用支持库:

floatingActionButton.setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.ic_full_sad));

【讨论】:

【参考方案4】:

假设您将使用图像ic_arrow_forward.png 作为您的晶圆厂的背景:

fab.setImageResource(R.mipmap.ic_arrow_forward);

【讨论】:

如果你使用 R.drawable.* 或 R.mipmap.*,使用setImageResource 更直接。我认为这个答案是最好的。【参考方案5】:

我用的如下,

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_btn);

// State 1 -on

fab.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.fab_on));

// State  2 - off

fab.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.fab_off));

【讨论】:

以上是关于android:从代码动态更改FAB(浮动操作按钮)图标的主要内容,如果未能解决你的问题,请参考以下文章

更改按钮我的FAB位置

Android L - 浮动操作按钮 (FAB)

如何更改主题更改时浮动操作按钮的颜色?

如何在 Android 的浮动操作按钮 FAB 中保留可绘制的默认颜色

Android设计支持库可扩展的浮动操作按钮(FAB)菜单

如何更改浮动操作按钮的颜色?