1.菜单的生成
1.1 编码方式
对一个Android应用中的每一个屏幕,也就是说,对每一个Activity类,都会拥有一个默认菜单。在Activity类中,定义了几个与菜单有关的方法,供继承于Activity类的子类去重载,从而定制我们自己的菜单。这几个方法为:
public boolean onCreateOptionsMenu(android.view.Menu menu); public boolean onPrepareOptionsMenu(android.view.Menu menu); public boolean onOptionsItemSelected(android.view.MenuItem item);
为了生成我们自己的菜单,Android为我们提供了两个时机点。当在Activity类实例启动时,我们可以通过重载onCreateOptionsMenu()来定制我们的菜单;另外,也可以在菜单每次被调用时,对菜单中的项重新生成,通过重载onPrepareOptionsMenu来实现。对于第二种方式,由于每次调用时都要重新生成,对于那些不经常变化的菜单,效率就会比较低。
参考以下代码:
关于menu.add(),请参考Android Developer Reference。
1.2 xml读取Menu
对于Android开发我们可以做的尽量MVC化,UI界面和Code逻辑代码分离方式,除了常规的Activity布局可以用xml实现外,菜单Menu也可以通过MenuInflater来映射一个布局文件,相关的创建菜单方法有些不同。
private static final int MENU_SETTING = Menu.FIRST;
private static final int MENU_ABOUT = Menu.FIRST + 1;
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
// add(int groupId, int itemId, int order, CharSequence title);
menu.add(0, MENU_SETTING, 0, "Setting");
// add(int groupId, int itemId, int order, int titleRes);
menu.add(0, MENU_ABOUT, 1, R.id.menu_about);
return true;
}
关于menu.add(),请参考Android Developer Reference。
1.2 xml读取Menu
对于Android开发我们可以做的尽量MVC化,UI界面和Code逻辑代码分离方式,除了常规的Activity布局可以用xml实现外,菜单Menu也可以通过MenuInflater来映射一个布局文件,相关的创建菜单方法有些不同。
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
// 载入menu
this.getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
在res文件夹下创建一个menu文件夹,并创建menu.xml如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_setting" android:title="@string/menu_setting" android:icon="@drawable/settign"></item> <item android:id="@+id/menu_about" android:title="@string/menu_about" android:icon="@drawable/about"></item> </menu>
menu.xml文件可以定制更多菜单项,并且可以设置菜单项是否可用、快捷方式、图标等。具体请参考Menu Resource | Android Developers。
2. 菜单响应
当菜单显示出来后,用户点击菜单中的某一菜单项,我们的菜单需要响应这个点击事件。这个也很简单,通过重载onOptionsItemSelected()方法来实现。
当菜单显示出来后,用户点击菜单中的某一菜单项,我们的菜单需要响应这个点击事件。这个也很简单,通过重载onOptionsItemSelected()方法来实现。
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.menu_about:
//处理逻辑
return true;
// 其他菜单项处理逻辑 ...
default:
return super.onOptionsItemSelected(item);
}
}
No comments:
Post a Comment