在Android平台上,设置菜单有两种方式:通过XML布局来实现和通过Menu.add方法实现。Camera系统中的菜单可以说是通过XML布局来实现的,但它的实现过程并非像一般文章里介绍的那样简单。所以,在此我就以设置capture时picture大小为例,将Camera系统中菜单的设置流程作以简单介绍。
1、资源文件分析
在packages/apps/Camera/res/xml/有两个xml文件,分别为Camera_preferences.xml和Video_preferences.xml。这两个文件中列举了Camera和Video Camera两种模式下的不同菜单信息。以Camera_preferences.xml为例,其中关于picture大小的菜单项信息为:
<ListPreference camera:key="pref_camera_picturesize_key"
camera:title="@string/pref_camera_picturesize_title"
camera:entries="@array/pref_camera_picturesize_entries"
camera:entryValues="@array/pref_camera_picturesize_entryvalues" />
pref_camera_picturesize_title的定义在packages/apps/Camera/res/values/strings.xml中,其中有如下的定义:
- <!--
Settings screen, Picture size title
-->
<item>@string/pref_camera_picturesize_entry_2592x1936</item>
<item>@string/pref_camera_picturesize_entry_2592x1936</item>
<item>@string/pref_camera_picturesize_entry_2048x1536</item>
<item>@string/pref_camera_picturesize_entry_1600x1200</item>
<item>@string/pref_camera_picturesize_entry_1024x768</item>
<item>@string/pref_camera_picturesize_entry_320x240</item>
</string-array>
pref_camera_picturesize_entryvalues的定义也在
packages/apps/Camera/res/values/arrays.xml中,其中有如下的定义:
-<string-array name="pref_camera_picturesize_entryvalues" translatable="false">
<item>2592x1944</item>
<item>2592x1936</item>
<item>2048x1536</item>
<item>1600x1200</item>
<item>1024x768</item>
<item>320x240</item>
</string-array>
由这些定义,我们可以看出,Android的Camera应用程序支持五种图片大小。但是硬件并非都支持这些大小。所以最终的菜单中只会显示这五种大小当中底层硬件所支持的,如果硬件支持的大小与其中任何一种都不匹配,则不会显示出“Picture size”菜单。