在Android中如何通过编程方式更改按钮图标?

26

如何在程序中以编程方式更改FloatingActionButton或Button小部件的android:src XML属性?我在一个活动中定义了一个按钮,如下所示:

FloatingActionButton floatingActionButton = (FloatingActionButton) this.findViewById(R.id.start_button);

它具有以下初始android:src设置:

android:src="@android:drawable/ic_media_play"

我正在尝试使用setImageResource(int id)方法来更改android:src的XML属性,但是如何在按钮点击后访问Drawable图标(例如ic_media_pause)。当我尝试将R.drawable.ic_media_pause传递给setImageResource()方法时,我收到了一个无法解析符号的错误。

floatingActionButton.setImageResource(R.drawable.ic_media_pause);

我该如何获取可用的R.drawable资源并将其作为参数传递。

非常感谢您的帮助。谢谢!


1
你的res/drawable文件夹中是否有一个名为“ic_media_pause”的文件,或者这是SDK中包含的默认Android图标?如果是这样,请尝试使用android.R.drawable.ic_media_pause - Andrew Senner
我正在使用SDK中包含的默认Android图标库。你的建议绝对有效。你应该发布一个回复。顺便问一下,我能否使用get.Resources.getIdentifier()来获取默认的Android图标库? - Alexander Staroselsky
让我快速检查一下。 - Andrew Senner
是的,你可以这样做,但根据文档,这是不被鼓励的。http://developer.android.com/reference/android/content/res/Resources.html - Andrew Senner
1
那么,如果我在drawable文件夹中有一个自定义的图像资源,例如,我想使用R.drawable.custom_image而不是使用getResources().getIdentifier("custom_image", "drawable", getPackage())?这就是他们所说的不鼓励使用标识符吗? - Alexander Staroselsky
不鼓励使用getIdentifier(),因为使用预定义的标识符比它更快。但是,在一些常见用例中需要使用getIdentifier() - Andrew Senner
1个回答

68

您正在尝试访问SDK中包含的默认图标。您需要在资源标识符前加上"android.",例如:

floatingActionButton.setImageResource(android.R.drawable.ic_media_pause); 

这将使您能够引用默认图标。

:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接