如何以编程方式更改轮廓按钮图标?

Posted

技术标签:

【中文标题】如何以编程方式更改轮廓按钮图标?【英文标题】:How can I change Outlined Button icon programmatically? 【发布时间】:2021-03-24 05:31:39 【问题描述】:

https://material.io/develop/android/components/buttons#text-button 从这个参考有一个 setIcon 方法,但我怎样才能达到它?

【问题讨论】:

【参考方案1】:

如果你没有使用 Material 主题作为你的应用主题,你需要在 xml 中声明这样的 Material 按钮:

 <com.google.android.material.button.MaterialButton
                android:id="@+id/outlinedButton"
                android:layout_
                android:layout_
                android:text="Outlined button"
                app:icon="@drawable/ic_launcher_background"
                style="@style/Widget.MaterialComponents.Button.OutlinedButton.Icon"
                />

并以编程方式更改图标:

findViewById<MaterialButton>(R.id.outlinedButton).setIcon(ContextCompat.getDrawable(this,R.drawable.ic_launcher_foreground))

【讨论】:

谢谢。我使用自己的主题,但父主题是 Theme.MaterialComponents.Light.NoActionBar 但这还不够,我需要使用你所说的。【参考方案2】:

在 Android 中,每个 UI 小部件组件要么是 View,要么派生自 View,根据文档,Button 派生自 TextView

现在有一些关于 Android 文本的重要知识。该框架允许您为每个文本定义Compound Drawables - 看看this method。有了它,您可以以编程方式设置复合可绘制对象,但还要注意文档的 Related XML Attributes 部分 - 可绘制对象可以在 XML 中定义,这通常是最简单的方法(当然,如果适用于给定情况)。

您附加的按钮图像看起来像MaterialButton,这也是一个标准的Button,因此“加号”图标应该只是一个复合可绘制图标,因此应该很容易更改,如上所述。

编辑:转念一想,使用 Google 的 Android 材料设计库,事情通常不会那么简单。看看我上面链接的MaterialButton 文档——那里有一个setIcon() 方法,它可能会回答你的问题。您还可以使用app:icon 属性在 XML 中定义您的可绘制图标。

【讨论】:

以上是关于如何以编程方式更改轮廓按钮图标?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式更改标签栏项目使用的默认图标?

如何以编程方式访问 chromecast 图标

如何以编程方式为 UIButton 添加系统图标?

如何使用 WPF 按钮的参数或绑定来更改 XAML 样式中的 fa 图标

如何以编程方式更改解析推送通知图标?

以编程方式修改 ConstraintSet 链未按预期工作