【问题标题】:Android button: How to change icon programaticallyAndroid按钮:如何以编程方式更改图标
【发布时间】:2021-07-04 19:38:42
【问题描述】:

我通过扩展 XML 布局从 XML 数据动态创建卡片列表。此布局有一个带有虚拟值的按钮来抑制 IDE 的警告,我想根据该 XML 资源中的数据设置标签和前导图标。

我可以设置标签,但是我找不到改变app:icon属性的方法。

layout.xml:

...
<Button
    android:id="@+id/listItemAction"
    style="@style/Widget.MaterialComponents.Button.TextButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginBottom="8dp"
    android:text="@string/misc_load" <!-- dummy value -->
    app:icon="@drawable/ic_round_help_24" <!-- dummy value --> />
...

Adapter.java:

...
viewHolder.action.setText(list.get(position).label); // it works
viewHolder.action.setIcon(list.get(position).icon); // there is no such method
...

【问题讨论】:

    标签: android android-button material-components-android


    【解决方案1】:

    由于您使用的是 Material Components 主题,因此您的 Button 被替换为 MaterialButton 的广告运行时。

    要应用setIcon 方法,您必须使用MaterialButton

    (button as MaterialButton).icon  = ContextCompat.getDrawable(this,R.drawable.xxx)
    

    【讨论】:

    • 抱歉回复晚了。您的解决方案有效。谢谢!
    【解决方案2】:

    可以试试下面两种方法吗

    // Using icon resource ID
    textButton.setIconResource(R.drawable.ic_show_black_18dp)
    // Using icon Drawable
    val showDrawable = AppCompatResources.getDrawable(context, R.drawable.ic_show_black_18dp)
    textButton.icon = showDrawable
    

    【讨论】:

    • 这些似乎都不起作用。我收到Cannot resolve symbol 错误。
    猜你喜欢
    • 2011-05-14
    • 1970-01-01
    • 2015-10-03
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2011-03-07
    相关资源
    最近更新 更多