Android 按钮:如何以编程方式更改图标
Android button: How to change icon programatically
我通过膨胀 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
...
可以试试下面两种方法吗
// 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
由于您使用的是 Material Components 主题,因此您的 Button
被替换为 MaterialButton
。
要应用方法 setIcon
,您必须使用 MaterialButton
:
(button as MaterialButton).icon = ContextCompat.getDrawable(this,R.drawable.xxx)
我通过膨胀 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
...
可以试试下面两种方法吗
// 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
由于您使用的是 Material Components 主题,因此您的 Button
被替换为 MaterialButton
。
要应用方法 setIcon
,您必须使用 MaterialButton
:
(button as MaterialButton).icon = ContextCompat.getDrawable(this,R.drawable.xxx)