Android开发学习日志(四)
接上一篇,我们就来优化一下上一篇中的计算器。我们回过头来看看我们已经实现的App,和一个成熟的App相比我们缺少了什么。最基本就应该是菜单了吧,下面就说一下菜单。
之前我们讲过,在MainActivity中我们重写了两个方法,onCreate和onCreateOptionsMenu,onCreateOptionsMenu就是创建菜单的方法。和控件一样,菜单的创建也有使用xml的描述语言(布局文件)和用java代码创建两种方法,我们看到自动生成的onCreateOptionsMenu方法有这样一句:getMenuInflater().inflate(R.menu.activity_main, menu);这个就是把布局文件中定义的菜单加载到当前Activity的菜单实例中。既然知道了是布局文件来定义菜单的,那么我们就打开/Calculator/res/menu/activity_main.xml这个菜单布局文件来看看。里面应该仅有下面的代码:
1 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 2 <item android:id="@+id/menu_settings" 3 android:title="@string/menu_settings" 4 android:orderInCategory="100" 5 android:showAsAction="never" /> 6 </menu>
当然,我们运行我们的程序的时候按menu键,菜单也应该只有一个setting项,点击之后没有任何反应,因为我们还没有为菜单添加事件监听处理程序。
下面我们修改一下菜单,我们把setting项改为About,用来显示应用的相关信息,再添加一个退出的菜单,并且为菜单添加事件监听。
1 <menu xmlns:android="http://schemas.android.com/apk/res/android"> 2 <item android:id="@+id/menu_about" 3 android:title="@string/menu_about" 4 android:orderInCategory="100" 5 android:showAsAction="never" /> 6 <item android:id="@+id/menu_exit" android:orderInCategory="101" android:title="@string/menu_exit" android:showAsAction="never"></item> 7 </menu>
这里说一句:菜单基本上分为三类,选项菜单(optinosMenu),上下文菜单(ContextMenu),子菜单(subMenu),选项菜单就是我们按了menu键之后出现的菜单,也就是上面我们正在添加的菜单,选项菜单是以Activity为单位的,所以我们添加选项菜单的处理程序非常简单,只需要重写Activity中的onOptionsItemSelected方法就可以了。顾名思义,该方法就是当菜单被点击时调用的方法。其参数是被点击菜单项的实例。
1 @Override 2 public boolean onOptionsItemSelected(MenuItem item) { 3 // 貌似没什么用,现在可加可不加, 不过不能保证以后google不会扩展基类中的代码 4 super.onOptionsItemSelected(item); 5 6 switch (item.getItemId()) { 7 case R.id.menu_about: 8 this.createAlertDialog(); 9 break; 10 11 case R.id.menu_exit: 12 finish(); 13 break; 14 } 15 16 return false; 17 } 18 19 /** 20 * 创建About对话框 21 */ 22 private void createAlertDialog() { 23 Dialog aboutDialog = new AlertDialog.Builder(this).setTitle("About") 24 .setPositiveButton("OK", new DialogInterface.OnClickListener() { 25 public void onClick(DialogInterface dialog, int which) { 26 dialog.cancel(); 27 } 28 }).setMessage("Calculator V1.0\r\nAuthor: Null Pointer\r\nInstruction: ......").create(); 29 aboutDialog.show(); 30 }
显示About信息这里使用了AlertDialog,顾名思义就是弹窗,使用安卓系统的朋友应该是经常见到的。
当我们点击文本框时,系统的输入法还是会弹出来,用户体验不是很好,我们把输入法屏蔽。其实就是EditText的属性,加上这句就行了:inputText.setInputType(InputType.TYPE_NULL);
结束。