2010年5月26日 星期三

加入Menu!

加入選單!

話先說在前頭


先看一下新加入的程式部分!

    1.     protected static final int MENU_ABOUT = Menu.FIRST;
    2.     protected static final int MENU_QUIT = Menu.FIRST + 1;   
    3.    
    4.     @Override
    5.     public boolean onCreateOptionsMenu(Menu menu){
    6.        super.onCreateOptionsMenu(menu);
    7.     menu.add(0, MENU_ABOUT, 0, "關於...");
    8.     menu.add(0, MENU_QUIT, 0, "結束");
    9.        return true;   
    10.   }
    11.    
    12.     @Override
    13.     public boolean onOptionsItemSelected(MenuItem item){
    14.          super.onOptionsItemSelected(item);
    15.          switch(item.getItemId()){
    16.          case MENU_ABOUT:
    17.          openOptionsDialog();
    18.                  break;
    19.          case MENU_QUIT:
    20.          finish();
    21.                  break;
    22.     }
    23.        return true;
    24.   }

當我們要加入選單的時候都會需要去覆載兩個函式,分別是 onCreateOptionsMenu(Menu menu)onOptionsItemSelected(MenuItem item) 這兩個。

我們在 onCreateOptionsMenu(Menu menu) 中用 menu.add 來增加選單的選項,menu.add 的格式如下,


menu.add(0, 識別符號, 0, 字串或資源識別符號);

[字串或資源識別符號]會顯示在選單上面,所以我們增加了[關於...]跟[結束]兩個選單的選項。


onOptionsItemSelected(MenuItem item) 中我們用 switch 來控制按下了什麼按鈕該對應呼叫到什麼事件。


執行程式我們就可以看到按下選單後的出現我們所設定的選單了!



全部的程式如下:

    1. package com.demo.android.bmi2;
    2.  
    3. import android.app.Activity;
    4. import android.net.Uri;
    5. import android.os.Bundle;
    6. import android.widget.Button;
    7. import android.widget.EditText;
    8. import android.widget.TextView;
    9. //import android.widget.Toast;
    10. import android.view.Menu;
    11. import android.view.MenuItem;
    12. import android.view.View;
    13. import android.view.View.OnClickListener;
    14. import java.text.DecimalFormat;
    15. import android.app.AlertDialog;
    16. import android.content.DialogInterface;
    17. import android.content.Intent;
    18.  
    19. public class Bmi2 extends Activity {
    20.    
    21.     private View btnCalc;
    22.     private TextView fieldHeight;
    23.     private TextView fieldWeight;
    24.     private TextView result;
    25.     private TextView fieldSuggest;
    26.  
    27.     /** Called when the activity is first created. */
    28.     @Override
    29.     public void onCreate(Bundle savedInstanceState) {
    30.         super.onCreate(savedInstanceState);
    31.         setContentView(R.layout.main);
    32.        
    33.         findViews();
    34.         setListeners();
    35.     }   
    36.    
    37.     private void setListeners() {
    38.         // TODO Auto-generated method stub
    39.         btnCalc.setOnClickListener(calcBMI);
    40.     }
    41.    
    42.     private void findViews() {
    43.         // TODO Auto-generated method stub
    44.         btnCalc = (Button)findViewById(R.id.btnCalc);
    45.         fieldHeight = (EditText)findViewById(R.id.etHeight);
    46.         fieldWeight = (EditText)findViewById(R.id.etWeight);
    47.         result = (TextView)findViewById(R.id.tvResult);
    48.         fieldSuggest = (TextView)findViewById(R.id.tvSuggest);
    49.     }
    50.  
    51.     private OnClickListener calcBMI = new OnClickListener() 
    52.     {
    53.         public void onClick(View v)
    54.         {
    55.             DecimalFormat nf = new DecimalFormat("0.00");
    56.            
    57.             double height = Double.parseDouble(fieldHeight.getText().toString())/100;
    58.             double weight = Double.parseDouble(fieldWeight.getText().toString());
    59.             double bmi = weight / (height * height);
    60.            
    61.             result.setText("Your BMI is " + nf.format(bmi));
    62.  
    63.             if(bmi>25)
    64.             {
    65.                 fieldSuggest.setText(R.string.advice_heavy);
    66.             }
    67.             else if(bmi<20)
    68.             {
    69.                 fieldSuggest.setText(R.string.advice_light);
    70.             }
    71.             else
    72.             {
    73.                 fieldSuggest.setText(R.string.advice_avg);
    74.             }
    75.             //openOptionsDialog();
    76.         }
    77.     };
    78.    
    79.     private void openOptionsDialog() {
    80.         // TODO Auto-generated method stub
    81.         //Toast.makeText(Bmi2.this, "BMI2 計算器", Toast.LENGTH_SHORT).show();
    82.         new AlertDialog.Builder(Bmi2.this)
    83.         .setTitle("關於 Android BMI2")
    84.         .setMessage("Android BMI2 Calc")
    85.         .setPositiveButton("OK", new DialogInterface.OnClickListener() {
    86.            
    87.             @Override
    88.             public void onClick(DialogInterface dialog, int which) {
    89.                 // TODO Auto-generated method stub
    90.                
    91.             }
    92.         })
    93.         .setNegativeButton(R.string.homepage_label,
    94.                 new DialogInterface.OnClickListener() {
    95.                    
    96.                     @Override
    97.                     public void onClick(DialogInterface dialog, int which) {
    98.                         // TODO Auto-generated method stub
    99.                         Uri uri = Uri.parse("http://androidbmi.googlecode.com/");
    100.                         Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    101.                         startActivity(intent);
    102.                     }
    103.                 })
    104.         .show();
    105.     }
    106.    
    107.     protected static final int MENU_ABOUT = Menu.FIRST;
    108.     protected static final int MENU_QUIT = Menu.FIRST + 1;   
    109.    
    110.     @Override
    111.     public boolean onCreateOptionsMenu(Menu menu){
    112.         super.onCreateOptionsMenu(menu);
    113.         menu.add(0, MENU_ABOUT, 0, "關於...");
    114.         menu.add(0, MENU_QUIT, 0, "結束");
    115.         return true;   
    116.     }
    117.    
    118.     @Override
    119.     public boolean onOptionsItemSelected(MenuItem item){
    120.         super.onOptionsItemSelected(item);
    121.         switch(item.getItemId()){
    122.         case MENU_ABOUT:
    123.              openOptionsDialog();
    124.              break;
    125.         case MENU_QUIT:
    126.              finish();
    127.              break;
    128.         }
    129.         return true;
    130.     }
    131. }

沒有留言:

張貼留言