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(dr
awable)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(浮动操作按钮)图标的主要内容,如果未能解决你的问题,请参考以下文章