Android开发从入门到精通(8) _3
?
使用菜单?第八章(3)
??在本节中,你将建造一个应用程序来允许用户从一些不同的Views中进行选择。当用户选择一个View,一个新的活动将被启动。你将要使用给用户选择的工具就是Android菜单。看一下这个插图(略)。当用户激活菜单按钮,菜单就会显示。
????如你所见,从Android主屏幕选择菜单按钮产生一个墙纸的设定选项。你将为你的主活动创建一个类似的菜单,该菜单为View保留所有用户可以从中选择的选项。现在,AndroidViews.java文件的编码应当如下:
package?android_programmers_guide.AndroidViews;?
import?android.app.Activity;?
import?android.os.Bundle;?
public?class?AndroidViews?extends?Activity?{?
/**?Called?when?the?Activity?is?first?created.?*/?
@Override?
public?void?onCreate(Bundle?icicle)?{?
super.onCreate(icicle);?
setContentView(R.layout.main);?
}?
}
????你增加任何东西到活动中,你需要输入包装一个包装来创建你的菜单。输入android.view.Menu到AndroidViews活动中:
Import?android.view.Menu;
????要创建菜单,你需要优先活动的onCreateOptionMenu()方法。onCreateOptionMenu()方法是一个以布尔方式被呼叫的当用户第一次选择菜单按钮。你将使用这个方式来建造菜单并增加可选择的条目到其中。增加下面的代码到AndroidViews.java:
@Override?
public?boolean?onCreateOptionsMenu(Menu?menu)?{?
super.onCreateOptionsMenu(menu);?
}
????你将增加代码在onCreaterOptionMenu()内增加菜单。需要增加的条目是你将要在本项目中创建的Views。下面是将要增加到菜单的清单:
●?AutoComplete?自动完成?
●?Button?按钮?
●?CheckBox?选择框?
●?EditText?
●?RadioGroup?按钮组?
●?Spinner?
????在前面创建的代码优先onCreateOptionsMenu()方法,你在菜单中传递一个菜单变量呼叫菜单。这个变量代表实际的在Android界面中创建的菜单条目。要增加这些条目到菜单中,你要使用menu.add()方法。这个呼叫的语句是:
menu.add(<group>,<id>,<title>)?
参数组被用来与菜单条目相关联。在本例中,你将不使用组。但是,这个值是非常重要的。参数id被用来检测哪一个菜单条目被选择。最后,参数标题是显示在菜单上的文本。
增加下列代码到onCreateOptionsMenu(?)方法中:
menu.add(0,?0,?"AutoComplete");?
menu.add(0,?1,?"Button");?
menu.add(0,?2,?"CheckBox");?
menu.add(0,?3,?"EditText");?
menu.add(0,?4,?"RadioGroup");?
menu.add(0,?5,?"Spinner");
????你完整的AndroidViews.java文件应当看上去像这样:
package?android_programmers_guide.AndroidViews;?
import?android.app.Activity;?
import?android.os.Bundle;?
import?android.view.Menu;?
public?class?AndroidViews?extends?Activity?{?
/**?Called?when?the?Activity?is?first?created.?*/?
@Override?
public?void?onCreate(Bundle?icicle)?{?
super.onCreate(icicle);?
setContentView(R.layout.main);?
}?
@Override?
public?boolean?onCreateOptionsMenu(Menu?menu)?{?
super.onCreateOptionsMenu(menu);?
menu.add(0,?0,?"AutoComplete");?
menu.add(0,?1,?"Button");?
menu.add(0,?2,?"CheckBox");?
menu.add(0,?3,?"EditText");?
menu.add(0,?4,?"RadioGroup");?
menu.add(0,?5,?"Spinner");?
return?true;?
}?
}
????如果你执行如上面代码所写,你应当看见如下图所示的菜单(略)。
????这个就是你想要达成的。试着去点击菜单中的任意一个选项。当用户选择一个菜单项目时,你在处理世间的活动中还什么都没有呢。
????你增加的方法优先处理到菜单的呼叫是onOptionsItemSelected(?)。再一次,像onCreateOptionsMenu(),当菜单项被选择,onOptionsItemSelected(?)是你需要优先一个拥有代码,被执行的布尔方法。优先代码应当如下:
@Override?
public?boolean?onOptionsItemSelected(Menu.Item?item){?
}
这个代码有个问题:当任何菜单项被选择,onOptionsItemSelected(?)?是个常规被呼叫的方法。你需要给定onOptionsItemSelected(?)一条路来识别不同菜单项之间的差别并执行相应的代码。因此,使用一个switch/case?声明来帮助方法从不同的项目中选择。当你创建了菜单项,你定义了一系列的从0到5的数字作为菜单项的值。你可以在case声明中使用一个呼叫来getI()来检测哪一个菜单项被选择:
switch?(item.getId())?{?
case?0:?
return?true;?
case?1:?
return?true;?
case?2:?
return?true;?
case?3:?
return?true;?
case?4:?
return?true;?
case?5:?
return?true;?
}?
return?true;?
????在这个case声明中,对于每一个id当前设定的动作是返回true.这个不会做任何的事情但是会保留一个开放的可以增加代码的区域。你的AndroidViews.java文件现在可以被用来创建被新菜单系统启动的活动了。完整的AndroidViews.java文件代码应当看上去如下:
package?android_programmers_guide.AndroidViews;?
import?android.app.Activity;?
import?android.os.Bundle;?
import?android.view.Menu;?
public?class?AndroidViews?extends?Activity?{?
/**?Called?when?the?Activity?is?first?created.?/?
@Override?
public?void?onCreate(Bundle?icicle)?{?
super.onCreate(icicle);?
setContentView(R.layout.main);?
}?
@Override?
public?boolean?onCreateOptionsMenu(Menu?menu)?{?
super.onCreateOptionsMenu(menu);?
/**?Add?one?menu?item?for?each?View?in?our?project?*/?
menu.add(0,?0,?"AutoComplete");?
menu.add(0,?1,?"Button");?
menu.add(0,?2,?"CheckBox");?
menu.add(0,?3,?"EditText");?
menu.add(0,?4,?"RadioGroup");?
menu.add(0,?5,?"Spinner");?
return?true;?
}?
/**?Override?onOptionsItemSelected?to?execute?code?for?each?
menu?item?*/?
@Override?
public?boolean?onOptionsItemSelected(Menu.Item?item){?
}?
/**?Select?statement?to?handle?calls?
to?specific?menu?items?*/?
switch?(item.getId())?{?
case?0:?
return?true;?
case?1:?
return?true;?
case?2:?
return?true;?
case?3:?
return?true;?
case?4:?
return?true;?
case?5:?
return?true;?
}?
return?true;?
}?
}?
????完成了AndroidViews.java,你可以重点去创建其它的活动了,在下一节中,你将在项目中为每一个View创建一个活动并增加代码来启动case声明中view的活动。
为AutoComplete创建一个活动
?
更多信息请查看 http://www.javady.com/index.php/category/thread