I am looking at the Honeycomb Gallery sample code (here) and I ran across the following code while trying to add action items in my own app:
<item android:id="@+id/camera"
android:title="Camera"
android:icon="?attr/menuIconCamera"
android:showAsAction="ifRoom" />
The ?attr is throwing me for a loop. Can someone please explain what this is doing? How is this related to a drawable? I can’t seem to find any good information on Google. Also is there a listing or gallery of attributes we can use for icons instead of just menuIconCamera?
Thanks
Edit:
I did some more looking around and found that attrs.xml looks like this:
<resources>
<declare-styleable name="AppTheme">
<attr name="listDragShadowBackground" format="reference" />
<attr name="menuIconCamera" format="reference" />
<attr name="menuIconToggle" format="reference" />
<attr name="menuIconShare" format="reference" />
</declare-styleable>
Unfortunately that just makes it even more confusing for me. What is this doing?
The
?attr/menuIconCameravalue means that an icon frommenuIconCameraattribute of the current theme will be used.There must be a drawable assigned to the
menuIconCameraattribute somewhere in thethemes.xmlfile. If there’re two themes with different values of this attribute then actual icon will depend on a theme which is currently used.The
attrs.xmlfile is used to define custom attributes. Without this definition compiler will treat unknown attributes as erroneous.