Reputation: 53345
Android framework has variety of icons and images - accessible as R.drawable.* - that can be used by applications for common tasks. Their names give some hint about what they are, but in many cases that's not sufficient. One has to use trial-n-error to find the right icon that fits one's purpose.
My question: Is there a way where I can preview all these images in one place, so that I can quickly decide which ones to use?
I have looked inside android source code, but couldn't locate the root of these drawables.
Let me know if any of you have any tips. Thanks.
Upvotes: 20
Views: 15805
Reputation: 7038
You can preview all system icons in the Android SDK directory.
Finding Android SDK directory on Mac:
Android Studio.app
.Android Studio
> Preferences
sdk
: Appearance & Behavior
> System Settings
> Android SDK
Android SDK Location
: ~/Library/Android/sdkSystem icons directory:
Android SDK Location
/platforms/android-VER(21~28)
/data/res/drawable-hdpi/
Use Finder.app
to access the directory, show the items as icons, and then you can preview all system icons.
You can also search by icon name, such as searching for icons containing ic_menu_
:
Or preview in Google Fonts / Icons (Not all).
Upvotes: 3
Reputation: 53345
Thanks Corey, that's pretty much what I was looking for. Meanwhile though, I cooked a small app to preview all the drawables. It's a small app which uses reflection to list all the drawables (image preview and their names) as shown in this screen shot.
It's basically following code snippet:
public class DrawablePreviewActivity extends ListActivity
{
private static final String TAG = "DrawablePreviewActivity";
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setTitle("Preview of android.R.drawable.*");
try {
Class RClass = Class.forName("android.R");
Class[] subclasses = RClass.getDeclaredClasses();
Class RDrawable = null;
for(Class subclass : subclasses) {
if("android.R.drawable".equals(subclass.getCanonicalName())) {
RDrawable = subclass;
break;
}
}
List<Map<String, Object>> drinfo = new ArrayList<Map<String, Object>>();
Field[] drawables = RDrawable.getFields();
for(Field dr : drawables) {
Map<String, Object> map = new HashMap<String, Object>();
Drawable img = getResources().getDrawable(dr.getInt(null));
map.put("drimg", dr.getInt(null));
map.put("drname", dr.getName());
drinfo.add(map);
}
setListAdapter(new SimpleAdapter(this,
drinfo,
R.layout.listitem,
new String[] { "drimg", "drname" },
new int[] { R.id.drimg, R.id.drname }));
} catch(IllegalAccessException iae) {
Log.e(TAG, iae.toString());
} catch(ClassNotFoundException cnfe) {
Log.e(TAG, cnfe.toString());
}
}
}
You can also get a source tarball from http://www.altcanvas.com/downloads/drawablepreview.tar.gz
or apk from http://www.altcanvas.com/downloads/apks/drawablepreview.apk
Upvotes: 18
Reputation: 4689
I have found a useful link at Android 1.5 Drawables which led to Google's official Icon Design Guidelines. It seems to contain most, if not all, of Android's built-in drawables.
Upvotes: 7