安卓按钮:如何通过程序更改图标



我通过扩展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
...

由于您使用的是Material Components主题,因此在运行时Button将替换为MaterialButton

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

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

你能尝试以下两种方法吗

// 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

最新更新