Android菜單詳解(五)——使用XML產生菜單

來源:互聯網
上載者:User

回顧前面的幾篇,我們都是直接在代碼中添加功能表項目,給功能表項目分組等,這是比較傳統的做法,它存在著一些不足。比如說,為了響應每個功能表項目,我們需要用常量來儲存每個功能表項目的ID等。為此,Android提供了一種更好的方式,就是把menu也定義為應用程式的資源,通過android對資源的本地支援,使我們可以更方便地實現菜單的建立與響應。這一篇就介紹如何使用XML檔案來載入和響應菜單,我們需要做這幾步:

  1. 在/res目錄下建立menu檔案夾
  2. 在menu目錄下使用與menu相關的元素定義xml檔案,檔案名稱是隨意的,android會自動為其產生資源ID。例如:R.menu.mainmenu對應menu目錄的mainmenu.xml資源檔
  3. 使用xml檔案的資源ID,將xml檔案中定義的功能表項目添加到menu對象中
  4. 響應功能表項目時,使用每個功能表項目對應的資源ID

下面就使用xml的方式完成《Android菜單詳解(二)——建立並響應選項菜單》中的options menu。

定義菜單資源檔

在res目錄下建立menu檔案夾,在menu下建立一個xml資源檔,我這裡叫做mainmenu.xml

編寫mainmenu.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- group1 -->
<group android:id="@+id/group1">
<item android:id="@+id/mi1"
android:title="item1"/>
<item android:id="@+id/mi2"
android:title="item2"/>
</group>
<!-- group 2 -->
<group android:id="@+id/group2">
<item android:id="@+id/mi3"
android:title="item3"/>
<item android:id="@+id/mi4"
android:title="item4"/>
</group>

</menu>

這裡簡單的添加了4個功能表項目,並將其分為2組。item元素的android:title值可以引用values中的string資源。

使用MenuInflater添加功能表項目

inflater在android中建立了從資源檔到對象的橋樑,MenuInflater即把菜單xml資源轉換為對象並添加到menu對象中,它可以通過activity的getMenuInflater()得到。我們在MainActivity中重寫onCreateOptionsMenu(...)方法。

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
returntrue;
}
響應功能表項目

最後重寫onOptionsItemSeleted(...)方法。

@Override
publicboolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.mi1:
// do sth
break;
case R.id.mi2:
// do sth
break;
case R.id.mi3:
// do sth
break;
case R.id.mi4:
// do sth
break;
}
returntrue;
}

這一步最大的體現了使用XML產生菜單的好處。android不僅為我們定義的xml檔案產生了資源ID,同樣可以為group,menu item來自動產生ID(就像為布局中定義的view產生id那樣)。這樣功能表項目ID的建立與管理就不用我們操心了,全部交給android去做吧!

至此,我們完成了一個簡單的“使用XML產生菜單”的demo,並從中體會到了使用資源檔的好處,因此這是android中建立菜單的推薦方式。實際上,我們在代碼中對功能表項目或分組的操作都能在xml檔案中完成,下面就簡單介紹一些比較常用的功能。(Google提供的API demos中有最全面的樣本)

更多菜單資源檔的功能

1.資源檔實現子功能表

子功能表通過在item元素中嵌套menu來實現。

<item android:title="系統設定">
<menu>
<item android:id="@+id/mi_display_setting"
android:title="顯示設定"/>
<item android:id="@+id/mi_network_setting"
android:title="網路設定"/>
<!-- 別的功能表項目 -->
</menu>
</item>

2.為功能表項目添加表徵圖

<item android:id="@+id/mi_exit"
android:title="退出"
android:icon="@drawable/exit"/>

3.設定功能表項目的可選出現

使用android:checkableBehavior設定一組功能表項目的可選策略,可選值為:none, all, single

<group android:id="..."
android:checkableBehavior="all">
<!-- 功能表項目 -->
</group>

使用android:checked設定特定功能表項目

<item android:id="..."
android:title="sometitle"
android:checked="true"/>

4.設定功能表項目可用/不可用

<item android:id="..."
android:title="sometitle"
android:enabled="false"/>

5.設定功能表項目可見/不可見

<item android:id="..."
android:title="sometitle"
android:visible="false"/>
結語

本篇是Android菜單詳解系列的最後一篇,本系列詳細介紹了android中各種常用菜單的提示和注意事項,希望能協助大家更好的理解,也期待與各位交流開發中的心得:)

相關文章

聯繫我們

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