第二章 吸引你的眼球—UI編程(8),第二章ui

來源:互聯網
上載者:User

第二章 吸引你的眼球—UI編程(8),第二章ui
2.4 Menu鍵的呼喚—Menu菜單

使用Android手機的朋友應該對手機的“Menu”鍵都不陌生吧。它使用起來方便、快捷,不需要佔用應用的介面,正因為它的這些特性,我們現在有很多的應用都使用了Menu-菜單鍵。

Menu菜單有好幾種類型,它們各有各的展現形式,分別使用在不同的場合,以下我們逐一對它們進行介紹。

 

1)普通的Menu(選項菜單)

    這是我們平時使用最多、也是最常見的菜單,它就是當使用者單擊裝置上的菜單按鍵時彈出的菜單。它最多隻能顯示6個,超過6個則第六個自動顯示“更多”選項來展開顯示。它的建立也很簡單,在Activity中覆蓋onCreateOptionsMenu(Menu menu)方法。

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0, 1, 1, "添加");

    menu.add(0, 2, 2, "刪除");

    return super.onCreateOptionsMenu(menu);

}

 

在Menu的add方法中有四個參數:

第一個int類型的group ID參數,代表的是組概念,你可以將幾個功能表項目歸為一組,以便更好的以組的方式管理你的功能表按鈕。

第二個int類型的item ID參數,代表的是項目編號。這個參數非常重要,一個item ID對應一個menu中的選項。在後面使用菜單的時候,就靠這個item ID來判斷你使用的是哪個選項。

 第三個int類型的order ID參數,代表的是功能表項目的顯示順序。預設是0,表示菜單的顯示順序就是按照add的顯示順序來顯示。

 第四個String類型的title參數,表示選項中顯示的文字。

按下Menu鍵後效果2-24所示:

圖2-24 普通Menu的使用

 

當然,我們也可以給每一個功能表項目設定單獨的表徵圖:

menu.add(0, 1, 1, "添加").setIcon(R.drawable.add_no);

menu.add(0, 2, 2, "刪除").setIcon(R.drawable.reduce_no);

 

效果2-25所示:

圖2-25 Menu添加表徵圖

 

這樣就有了“添加”和“刪除”兩個菜單選項。如果要添加點擊事件,則要覆蓋onOptionsItemSelected(MenuItem item)方法。

@Override

public boolean onOptionsItemSelected(MenuItem item) {

if(item.getItemId() == 1){

        Toast t = Toast.makeText(this, "你選的是添加菜單", Toast.LENGTH_SHORT);

        t.show();

} else if(item.getItemId() == 2){

        Toast t = Toast.makeText(this, "你選的是刪除菜單", Toast.LENGTH_SHORT);

        t.show();

    }

    return true;

}

 

2)SubMenu(子功能表)

    如果剛才介紹的Menu為第一級按鈕的話,SubMenu就是第二級按鈕,它是將相同功能的分組進行多級顯示的菜單。

  SubMenu的使用也同樣簡單,在第一段代碼onCreateOptionsMenu(Menu menu)方法中加入幾句,成下面這樣:

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    menu.add(0, 1, 1, "添加");

    menu.add(0, 2, 2, "刪除");

    SubMenu subMenu = menu.addSubMenu(0, 3, 3, "修改");

    subMenu.add(1, 4, 1, "使用者名稱修改");

subMenu.add(1, 5, 2, "密碼修改");  

return true;

}

 

點擊“修改”後就會出現子功能表,有兩個子選項,分別是“使用者名稱修改”和“密碼修改”,效果2-26所示:

圖2-26 子功能表的使用

 

3)Context Menu(操作功能表)

Context Menu類似於電腦上的右鍵,長按某個View之後彈出來的菜單。我們也來舉個簡單的例子加以說明。

首先在布局檔案中定義一個按鈕:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

    <Button

        android:id="@+id/test"

        android:layout_centerInParent="true"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="我的按鈕"/>

</RelativeLayout>

 

然後我們在該Activity的onCreate方法裡對這兩個按鈕進行註冊,代碼如下:

private Button myButton;

 

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    myButton = (Button) findViewById(R.id. my_button1);

    registerForContextMenu(myButton);   

}

 

註冊好了之後,我們就可以覆蓋onCreateContextMenu方法,在這方法中實現b1和b2兩個按鈕的長按事件,代碼如下:

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

            ContextMenuInfo menuInfo) {

if(v== myButton){

            Toast.makeText(DialogActivity.this, "長按事件", Toast.LENGTH_SHORT).show();

    }

    super.onCreateContextMenu(menu, v, menuInfo); }

 

我們長按按鈕來看看效果,2-27所示:

圖2-27 操作功能表的使用

 

我們使用的主要就是以上三種菜單,它們各有各的特點,應用在不同的場合。

其實很多時候,我們比不是通過“寫入程式碼”來建立菜單的,而是採用xml檔案的方式。這種方式可以使代碼和檔案分離開來,使代碼整個看上去更加的清晰。建立起來也相當的方便、快捷。下面我們也舉一個簡單的例子加以說明。

首先要在res/目錄下建一個檔案夾,名為menu,接著在該檔案夾下建一個名為menu_xml_file.xml的xml檔案,代碼如下:

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:id="@+id/grout_main">

        <item android:id="@+id/menu_1"

                android:title="Menu1"/>

        <item android:id="@+id/menu_2"

            android:title=" Menu2" />

</group>

</menu>

 

在Activity中覆蓋onCreateOptionsMenu(Menu menu)方法,代碼如下:

@Override

public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();

    inflater.inflate(R.menu.menu_xml_file, menu);

    return true;

}

 

這樣Menu菜單就建立好了,效果2-28所示:

圖2-28 xml檔案建立菜單

 

和之前一樣,我們也可以通過ID監聽它們的點擊事件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.