接上一篇,我們就來最佳化一下上一篇中的計算機。我們回過頭來看看我們已經實現的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,顧名思義就是彈窗,使用安卓系統的朋友應該是經常見到的。
當我們點擊文字框時,系統的IME還是會彈出來,使用者體驗不是很好,我們把IME屏蔽。其實就是EditText的屬性,加上這句就行了:inputText.setInputType(InputType.TYPE_NULL);
結束。