今晚在做應用程序時,需要用到 Menu。左思右想還是決定編寫 menu.xml 的方式來完成,這樣做的好處:1、方便管理(這也正是android應用xml的原因之一);2、便於修改。在 Android 中任何視圖組件的創建方式都有兩種:1、在XML文件中創建;2、在代碼中創建。Menu 也不例外,我們既可以在資源文件中聲明,也可以在代碼中創建。
Android 中的菜單分爲:1、選項菜單 ,2、上下文菜單和子菜單,都可以在XML文件中聲明定義,在代碼中通過MenuInflater 類來使用。本節主要講 Menu 在 XML 中的定義以及在程序中的應用。
一、 Menu 資源文件的定義
Menu 資源文件也是一個XML文件,該文件存放於工程的res\menu\menu.xml 目錄下。通過R.menu.menu的方式來引用。
Menu 資源文件的結構:
1、<menu>根元素,在<menu>根元素裏面會嵌套<item>和<group>子元素,<menu>根元素沒有屬性。
2、<item>元素中也可嵌套<menu>形成子菜單。
3、<group>表示一個菜單組,相同的菜單組可以一起設置其屬性,例如visible、enabled和checkable等。<group>元素的屬性說明如下:
— id:唯一標示該菜單組的引用id。
— menuCategory:對菜單進行分類,定義菜單的優先級,有效值爲container、system、secondary和alternative。
— orderInCategory:一個分類排序整數。
— checkableBehavior:選擇行爲,單選、多選還是其他。有效值爲none、all和single。
— visible:是否可見,true或者false。
— enabled:是否可用,true或者false。
<item>表示菜單項,包含在<menu>或<group>中的有效屬性。<item>元素的屬性說明如下。
— id:唯一標示菜單的ID引用。
— menuCategory:菜單分類。
— orderInCategory:分類排序。
— title:菜單標題字符串。
— titleCondensed:濃縮標題,適合標題太長的時候使用。
— icon:菜單的圖標。
— alphabeticShortcut:字符快捷鍵。
— numericShortcut:數字快捷鍵。
— checkable:是否可選。
— checked:是否已經被選。
— visible:是否可見。
— enabled:是否可用。
二、Menu 在程序中的應用
在定義了 Menu 後,接下來就是在程序中去應用它,方法如下:
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
下面來個實例:
1、定義Menu 文件(res\menu\blacklist.xml):
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="File" android:icon="@drawable/icon">
<menu>
<group android:id="@+id/noncheckable_group"
android:checkableBehavior="none">
<item android:id="@+id/newFile" android:title="New"
android:alphabeticShortcut="n" />
<item android:id="@+id/openFile" android:title="Open"
android:alphabeticShortcut="o" />
<item android:id="@+id/saveFile" android:title="Save"
android:alphabeticShortcut="s" />
</group>
</menu>
</item>
<item android:title="Edit" android:icon="@drawable/icon">
<menu>
<group android:id="@+id/edit_group" android:checkableBehavior="single">
<item android:id="@+id/cut" android:title="Cut" android:checked="true"/>
<item android:id="@+id/copy" android:title="Copy" />
<item android:id="@+id/past" android:title="Past" />
</group>
</menu>
</item>
<item android:title="Help" android:icon="@drawable/icon">
<menu>
<group android:id="@+id/help_group">
<item android:id="@+id/about" android:title="About" />
<item android:id="@+id/exit" android:title="Exit" />
</group>
</menu>
</item>
</menu>
2、程序中應用:
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.blacklist, menu);
return super.onCreateOptionsMenu(menu);
}
以上來自:http://blog.163.com/ybxu-123/blog/static/594737702010680575834/
但是我按照上面的做法做完後,發現在項目有錯誤,但是所有的src,res文件夾中都沒有錯誤。然後按照下面的做法成功的run了。
在Eclipse平臺進行Android 應用開發時,編輯,修改或增刪 res/下資源文件時有時會遇到如下錯誤提示:“Unparsed aapt error(s)! Check the console for output",因爲它沒有描述錯誤在什麼地方,我不知道如何修正,於是百度找找,其中不少的文章都說:
”可檢查控制檯輸出的提示來解決。
比如在res/layout下新加了一個xml文件: NewScreen.xml, 這時就會遇到上述錯誤提示, 控制檯會有類似如下提示:
the layout file name can only contain characters in [a- z0-9] etc.
即layout 文件名只能在小寫的26個字母和數字0~9中選取. 因此,我們的文件名中有大寫字母就會報錯.
有時如果錯誤提示不清楚, 可以把R.java刪掉使其重新生成. 可以不直接刪, 把res下的某個文件刪去(先備份一下), R.java即會重新更新.“
我嘗試多次去重命名剛纔新增加的xml文件,甚至刪除R.java文件,還是無濟於事!後來看到了另一個方法:
”但是你的控制檯上找不到錯誤或者看不懂錯誤的時候的一招。
例:出現
[2010-03-29 10:02:47 - Sudoku] W/ResourceType( 3540): Bad XML block: header size 62 or total size 26129448 is larger than data size 0
[2010-03-29 10:02:47 - Sudoku] E:\workspace\Sudoku\res\menu\menu.xml:2: ERROR Error parsing XML: no element found
[2010-03-29 10:04:55 - Sudoku] W/ResourceType( 4892): Bad XML block: header size 62 or total size 0 is larger than data size 0
以上錯誤的時候, 點 Project--------->clean..就會沒問題 “
照着做,真的沒事了!
以上來自:http://samlee820820.blog.163.com/blog/static/1307913682010835357727/