UI控制項之 Menu 菜單的的使用(一),uimenu

來源:互聯網
上載者:User

UI控制項之 Menu 菜單的的使用(一),uimenu
【Android 開發】:UI控制項之 Menu 菜單的的使用(一)2013年04月15日 ⁄ 綜合 ⁄ 共 6876字 ⁄ 字型大小 小 中 大 ⁄ 評論關閉      這一講開始我們來講一下Android中菜單的使用方法,菜單是應用中的普通的組件,主要是提供友好和專註的使用者體驗,你可以在你的Activity中使用 Menu APIs 來提供使用者動作和其他選項的操作。    從Android 3.0 開始,Android 裝置就不再提供一個專用的功能表按鈕,而是依賴與獨立的 6個選項的菜單面板,而且提供了 Action Bar來顯示使用者的行為。所以在高版本中,菜單的應用將會比較小了。1.  三種菜單顯示的方式

1). Options menu and action bar2). Context menu and contextual action mode3). Popup menu
2. 今天我們來介紹一下 Menu 的第一種的使用方式:Options menu and action bar [action bar 這裡先不做介紹,後期會詳細專題講解]   1) 
Options menu介紹

   Options menu 是一個Activity中的菜單選項的主要組成部分,它是作用在全域的app中的,比如說 "Search","Compose email","Settings."

   在Android 2.3 版本以下或者更低版本中,使用者可以通過點擊功能表按鈕來快顯功能表選項面板   在Android 3.0 進階別的版本中,這種選項菜單已經被 Action Bar 這種直接在螢幕中操作選項或者彈出選項的組件所替代了。從Android 3.0 開始,功能表按鈕是不贊成使用了(很多裝置已經沒有了菜單的按鈕) ,所以你應該轉移到 ActionBar 提供給使用者操作其它選項的動作。   詳情參考:Creating an Options Menu

   2)
Options menu 定義方式   建立 
Options menu 這個菜單有兩種使用方式,一種是在代碼中直接建立,主要是使用add()方法的方式,查看Menu API 文檔中的add()方法
   
public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)
   groudId:是指組ID,用以批量地對菜單子項進行處理和排序
   itemId:是子項ID,是每一個菜單子項的唯一標識
   order:指定菜單子項在選項菜單中的排列順序
   titler: 功能表標題

 

   另外一種是在 XML 中定義一個菜單,引用代碼如下
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    MenuInflater inflater = getMenuInflater();    inflater.inflate(R.menu.game_menu, menu);    return true;}
 3) 觸發事件

觸發點擊事件,當使用者選擇從菜單選項中選擇一項的時候(包括 ActionBar中的action items) ,系統會調用你Activity的onOptionsItemSelected()方法,這個方法會根據MenuItems來選擇,你可以調用getItemId()來確定選項的ID,這個ID值就是你在菜單資源中定義的id屬性值或者你通過add()方法給出的一個整型值。

查看API文檔中 Menu 的介紹   
By default, every Activity supports an options menu of actions or options. You can add items to this menu and handle clicks on your additions. The easiest way of adding menu items is inflating an XML file into the Menu via MenuInflater.
The easiest way of attaching code to clicks is via onOptionsItemSelected(MenuItem) and onContextItemSelected(MenuItem).

 

4) 在代碼中建立 Option menu 菜單的實現

1) 布局檔案 activity_main.xml

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" ></RelativeLayout>

2) 主要代碼 MainActivity.java

 

public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    // 建立菜單有兩種使用方式,一種是 使用inflate 來載入XML,如以下注釋中    // 第二種是使用 add()方法的方式來操作。    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        // getMenuInflater().inflate(R.menu.main, menu); 第一種使用方式        // 設定菜單選項一般最好設定低於 6個選項        MenuItem menuItem = menu.add(1001, 100, 1, "菜單一");        // menuItem.setIcon(R.drawable.ic_launcher); //高版本中不建議添加表徵圖。添加了表徵圖也不會顯示的。        MenuItem menuItem2 = menu.add(1001, 101, 2, "菜單二");        MenuItem menuItem3 = menu.add(1001, 102, 3, "菜單三");        menuItem3.setShortcut('c', 'c'); // 設定菜單快速鍵        return true;    }    // 觸發菜單的點擊事件    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case 100:                Toast.makeText(MainActivity.this, "點擊菜單一選項", 3).show();                break;            case 101:                // 菜單選項一般都使用者跳轉到其他Activity的操作,使用                // setIntent()方法,當然也可以通過Intent來傳遞一些資訊。                Intent intent = new Intent(MainActivity.this, NextActivity.class);                item.setIntent(intent);                break;            case 102:                break;            default:                break;        }        return super.onOptionsItemSelected(item);    }} 

3) 跳轉到的另外一個Activity的布局檔案 next_activity.xml

 

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <ProgressBar        android:id="@+id/progressBar1"       >package com.android.menudemo;import android.app.Activity;import android.os.Bundle;public class NextActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.next_activity);    }}

4) 程式執行結果

5. 
在 XML 中定義一個 Option Menu 
    下面我們來學一下第二種定義菜單的方式,使用XML來定義菜單,對於所有的菜單類型,Android 提供了一種標準的 XML 格式來定義菜單選項來替換在Activity中編寫菜單的方式,你可以定義一個菜單和它所有的選項在XML菜單資源中,你可以通過 inflate 菜單資源(將其載入為一個Menu對象) 在你的activity 或者 fragment中。

 

1) 使用這種方式有幾個好處:    1. 定義在xml中比較容易的顯示出菜單的結構    2. 可以將菜單的內容與應用程式代碼進行獨立    3. 在不同的平台版本,螢幕尺寸和其他配置中,可以通過應用資源架構來允許你建立靈活的菜單配置
2) 定義菜單的位置:
    定義好菜單選項,建立一個xml檔案在你工程目錄:res/menu/ 中,同時建立其組成菜單的以下標籤元素。
    <menu>
      定義好一個 Menu,它是菜單選項的內容包含者,<menu> 標籤元素必須是這個檔案的根節點,而且支援一個或者多個的<item>和<group>元素。
    <item>
      建立一個 MenuItem,它是菜單裡面的一個單一的選項,這個元素可以包含一個嵌套的 <menu> 元素來建立一個子功能表。 

 

      <item> 元素包含的屬性有
        android:id
        android:icon
        android:title
        android:showAsAction  

        
android:showAsAction [這個屬性比較重要的:它是作為aciton bar中的活動選項,可以指定何時或者如何顯示]
= "never" 表示不會在 ActionBar的標題列中去顯示了,查看API文檔: Menu Resource 的android:showAsAction
各種屬性,下面就寫兩個,其他讀者自己去參考。

 

ifRoom: 可以將這個選項放置在導覽列中,如果它有空間的話。withText: 可以在導覽列中設定標題,這個標題就是通過 android:title 定義的
 android:orderInCategory 表明擺放的順序,不一定從0還是計算,但必須大於等於0,建議從0,1,2,3....這樣依次給出,並且與XML行文的順序一致。

 

   
<group>
      這是可選的標籤,它可以讓你將菜單選項分類,這樣他們就能分享一些配置,比如活動狀態和顯示隱藏狀態等。更多資訊查看 
Creating Menu Groups.

6. 主要代碼實現

1) 菜單檔案 menu.xml 在目錄 
res/menu/ 中。

 

<menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/action_settings"        android:icon="@drawable/two"        android:orderInCategory="100"        android:showAsAction="ifRoom|withText"        android:title="@string/action_settings">        <menu>            <item                android:id="@+id/create_new"                android:title="建立檔案"/>            <item                android:id="@+id/open"                android:title="開啟檔案"/>        </menu>    </item>    <item        android:id="@+id/sys"        android:icon="@drawable/two"        android:orderInCategory="101"        android:showAsAction="never"        android:title="使用者菜單">        <menu>            <group android:id="@+id/group1" >                <item                    android:id="@+id/load"                    android:title="負載檔案">                </item>            </group>            <group android:id="@+id/group1" >                <item                    android:id="@+id/save"                    android:title="儲存檔案">                </item>            </group>        </menu>    </item></menu>

2) 主要代碼 MainActivity.java

 

package com.android.menudemo;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }        @Override    public boolean onMenuItemSelected(int featureId, MenuItem item) {        switch (item.getItemId()) {            case R.id.create_new:                Intent intent = new Intent(MainActivity.this, NextActivity.class);                item.setIntent(intent);                break;            case R.id.open:                Toast.makeText(MainActivity.this, "開啟檔案", 3).show();                break;            case R.id.load:                Toast.makeText(MainActivity.this, "負載檔案", 3).show();                break;            case R.id.save:                Toast.makeText(MainActivity.this, "儲存檔案", 3).show();                break;            default:                break;        }        return super.onMenuItemSelected(featureId, item);    }}

7. 程式執行結果

               

詳細參考:http://developer.android.com/guide/topics/ui/menus.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.