菜单当然是必不可少的控件了。Android手机都会有一个menu键,默认点击即弹出一个底部菜单。当然,菜单也可以通过其他操作触发。一般menu有两种创建方法,一种在xml文件中创建menu资源,一种在Java代码中创建,以option menu为例,分别讲解两种menu的创建方法。
1. 通过xml文件创建menu
这种方法非常简单,而且实现了界面与代码的分离。需要在res目录下新建一个名为menu的文件夹,并在里面创建一个menu配置文件。通过3个标签来创建menu资源。如表4.2.10所示:
表4.2.10 3个标签来创建menu资源
标签 | 描述 |
menu | menu标签定义了一个menu,它是其他两个标签的容器,必须有一个menu标签作为该文件的根标签 |
group | 一个可选的标签,在该标签下的item内容分为一个小组,通过分组可以实现多个item共享属性 |
item | 创建了一个menuItem,即一个menu中单独的条目,在该标签下还可包含menu标签,代表子菜单 |
Xml代码如下:
<menuxmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item1"
android:title="保存"
android:icon="@android:drawable/ic_menu_save"
/>
<item
android:id="@+id/item2"
android:title="管理"
android:icon="@android:drawable/ic_menu_manage"
/>
<item
android:id="@+id/item3"
android:title="帮助"
android:icon="@android:drawable/ic_menu_help"
/>
<item
android:id="@+id/item4"
android:title="详细信息"
android:icon="@android:drawable/ic_menu_info_details"
/>
<item
android:id="@+id/item5"
android:title="分享"
android:icon="@android:drawable/ic_menu_share"
/>
<!-- menu group -->
<group android:id="@+id/group1">
<item android:id="@+id/groupItem1"
android:icon="@android:drawable/ic_menu_delete"
android:title="删除"
>
</item>
<itemandroid:id="@+id/groupItem2"
android:icon="@android:drawable/ic_menu_edit"
android:title="编辑"
></item>
</group>
</menu>
代码解释:
这里创建了较多的menu条目,要注意的是,Android默认只能显示2行3列6个菜单条目。如果超过6个,则menu条目中会有一个more选项,点击弹出剩余的菜单,而这些菜单将不显示图片。光有menu资源显然是不是创建一个menu的,创建一个option menu需要覆盖onCreateOptionsMenu(Menu menu)方法。在该方法中通过MenuInflater.inflate()方法为menu加入menu资源。代码如下所示:
@Override
public boolean onCreateOptionsMenu(Menumenu) {
// Inflate the menu; thisadds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
运行效果为图4.2.10-1和图4.2.10-2.
图4.2.10-1
图4.2.10-2
1. 在Java代码中添加menu
详情看示例代码。
public class MainActivity extends Activity {
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 覆盖该方法,创建菜单
*/
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
menu.add(0,1, 1, "分享").setIcon(android.R.drawable.ic_menu_share);
menu.add(0,2,2,"保存").setIcon(android.R.drawable.ic_menu_save);
returnsuper.onCreateOptionsMenu(menu);
}
/**
* 监听menu点击事件
*/
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
//TODO Auto-generated method stub
if(item.getItemId()== 1) {
Toast.makeText(this,"你点击了分享",Toast.LENGTH_SHORT).show();
}elseif(item.getItemId() == 2) {
Toast.makeText(this,"你点击了保存",Toast.LENGTH_SHORT).show();
}
returnsuper.onOptionsItemSelected(item);
}
}
代码解释:
代码中通过重写onCreateOptionMenu方法创建一个menu,然后用add方法添加MenuItem,该方法参数依次为组Id,ItemId,顺序,显示的文本。重写了onOptionsItemSelected方法,监听menu的操作。运行效果如图4.2.10-3和图4.2.10-4所示
图4.2.10-3
图4.2.10-4