Android編程之菜單實(shí)現(xiàn)方法
本文實(shí)例講述了Android編程之菜單實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
菜單是許多應(yīng)用程序不可或缺的一部分,Android中更是如此,所有搭載Android系統(tǒng)的手機(jī)都要有一個(gè)“menu”鍵,即菜單鍵,由此可見(jiàn)菜單在Android程序中的重要與特殊,其中Android的SDK提供了三種類(lèi)型:分別為options menu(常規(guī)菜單),context menu(上下文菜單)和submenu(子菜單)。其中options menu是通過(guò)按Menu鍵來(lái)顯示,context menu通過(guò)在view(視圖控件上)按2秒之后才會(huì)顯示,這兩種菜單都可以嵌套子菜單,但是子菜單里不能嵌套子菜單。
Options menu只能在屏幕最下面顯示六個(gè)菜單選項(xiàng),這六個(gè)菜單叫做icon menu(圖標(biāo)菜單),圖標(biāo)菜單不能有checkable選項(xiàng),多于6項(xiàng)的會(huì)以more icon menu菜單來(lái)調(diào)出,叫做expanded menu(擴(kuò)展菜單).options menu(選項(xiàng)菜單)通過(guò)activity 的onCreateOptionsMenu來(lái)生成,這個(gè)函數(shù)只會(huì)在Menu第一次生成時(shí)調(diào)用,任何想要改變options menu的只能通過(guò)onPrepareOptionsMenu來(lái)實(shí)現(xiàn),這個(gè)函數(shù)會(huì)在menu顯示之前被調(diào)用。onOptionsItemSeleted用來(lái)處理選中的options menu菜單項(xiàng)
Context Menu是跟某個(gè)具體的view捆綁在一起的,在activity中用registerForContextMenu來(lái)為某個(gè)view注冊(cè)上下文菜單。Context menu在顯示之前會(huì)調(diào)用onCreateContextMenu來(lái)生成menu,onContextItemSeleted用來(lái)處理選中的context menu 菜單。
Submenu是子菜單,可以嵌套在以上兩種菜單中,但是子菜單不能嵌套子菜單
Android還提供了對(duì)菜單項(xiàng)進(jìn)行分組的功能,可以把相似功能的菜單分在一組里面,這樣就可以通過(guò)調(diào)用setGroupCheckable,setGroupEndable,setGroupVisible來(lái)設(shè)置屬性菜單,而不用單獨(dú)設(shè)置了。
1、下面是一個(gè)創(chuàng)建options menu 的例子:
首先在res里創(chuàng)建一個(gè)menu文件夾,里面可以創(chuàng)建許多menu的資源文件,方便管理。在這個(gè)文件夾里創(chuàng)建一個(gè)Android的xml文件,代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/newFile"
android:icon="@drawable/ic_launcher"
android:title="@string/newFile_title"/>
<item
android:id="@+id/ecit"
android:icon="@drawable/ic_launcher"
android:title="@string/exit_title"/>
</menu>
這里創(chuàng)建了兩個(gè)菜單選項(xiàng),每個(gè)item是一個(gè)菜單選項(xiàng),其中的icon也可以不寫(xiě);title里面的內(nèi)容要在string文件里提前寫(xiě)上,這是菜單的標(biāo)題;最后在Activity里面通過(guò)onCreateOptionsMenu方法創(chuàng)建這個(gè)菜單,然后通過(guò)onOptionsItemSelect方法來(lái)處理這個(gè)菜單。代碼如下:
package cn.csdn.android.menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.Toast;
public class MenuTest1Activity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
return true;
}
}
運(yùn)行結(jié)果如下圖所示:

在屏幕的下方可以看到這兩個(gè)菜單。
2、在Activity中添加方法可以響應(yīng)菜單的一些事件,通過(guò)上面的例子,在它的Activity中添加onOptionsItemSelected方法,可以是菜單完成它的功能,onOptionsItemSelected的代碼如下:
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.newFile:
Toast.makeText(this,"new file",Toast.LENGTH_LONG).show();
break;
case R.id.ecit:
//Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
this.finish();
break;
}
添加此方法后點(diǎn)擊“退出”按鈕可以退出,點(diǎn)擊“新建文件”出現(xiàn)名為“new file”的對(duì)話框。
也可以用onMenuItemClick方法處理:代碼如下
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.newFile:
Toast.makeText(this, "new file", Toast.LENGTH_LONG).show();
break;
case R.id.ecit:
// Toast.makeText(this,"exit",Toast.LENGTH_LONG).show();
this.finish();
break;
}
return false;
功能和上一個(gè)方法一樣
3、創(chuàng)建子菜單,在xml文件中插入菜單,下面的例子是在第二個(gè)菜單里插入兩個(gè)菜單:xml文件源碼如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menuitem1"
android:title="menuitem1"/>
<item
android:id="@+id/menuitem2"
android:title="menuitem2">
<menu >
<item
android:id="@+id/menuitem3"
android:title="menuitem3"/>
<item
android:id="@+id/menuitem4"
android:title="menuitem4">
</item>
</menu>
</item>
</menu>
4、帶單選或復(fù)選的子菜單,在創(chuàng)建菜單時(shí)添加setGroupCheckable方法,來(lái)確定添加的是單選還是復(fù)選:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.second_menu, menu);
SubMenu sm = menu.findItem(R.id.item3).getSubMenu();
sm.setIcon(R.drawable.ic_launcher);
// sm.setGroupCheckable(0, true, true);
sm.getItem(0).setCheckable(true);
sm.getItem(0).setChecked(true);
this.menu = menu;
return super.onCreateOptionsMenu(menu);
}
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android動(dòng)態(tài)添加menu菜單的簡(jiǎn)單方法
- Android編程實(shí)現(xiàn)自定義系統(tǒng)菜單背景的方法
- Android仿微信頂/底部菜單欄效果
- Android實(shí)現(xiàn)類(lèi)似于PC中的右鍵彈出菜單效果
- Android編程之菜單的實(shí)現(xiàn)方法實(shí)例詳解
- Android編程實(shí)現(xiàn)二級(jí)下拉菜單及快速搜索的方法
- Android開(kāi)發(fā)之menu菜單
- Android實(shí)現(xiàn)模仿UCweb菜單效果的方法
- Android上下文菜單用法實(shí)例分析
- Android選項(xiàng)菜單用法實(shí)例分析
- Android仿微信菜單(Menu)(使用C#和Java分別實(shí)現(xiàn))
- Android編程實(shí)現(xiàn)為應(yīng)用添加菜單的方法
相關(guān)文章
Flutter 自定義Drawer 滑出位置的大小實(shí)例代碼詳解
這篇文章主要介紹了Flutter 自定義Drawer 滑出位置的大小,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
OpenGL關(guān)于glStencilFuncSeparate()和glStencilFunc()函數(shù)的區(qū)別講解
今天小編就為大家分享一篇OpenGL關(guān)于glStencilFuncSeparate()和glStencilFunc()函數(shù)的區(qū)別講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
Android自定義View實(shí)現(xiàn)飄動(dòng)的葉子效果(三)
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)飄動(dòng)的葉子效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android遠(yuǎn)程服務(wù)編寫(xiě)和調(diào)用教程
這篇文章主要介紹了Android遠(yuǎn)程服務(wù)編寫(xiě)和調(diào)用教程,本文教大家如何編寫(xiě)或者調(diào)用Android的遠(yuǎn)程服務(wù),感興趣的小伙伴們可以參考一下2016-02-02
Android Studio無(wú)法執(zhí)行Java類(lèi)的main方法問(wèn)題及解決方法
這篇文章主要介紹了Android Studio無(wú)法執(zhí)行Java main方法的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Android開(kāi)發(fā)SavedState?Jetpack狀態(tài)保存利器
這篇文章主要為大家介紹了Android開(kāi)發(fā)SavedState?Jetpack狀態(tài)保存利器使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
你值得擁有的Android Studio開(kāi)發(fā)小技巧
這篇文章主要為大家分享了值得擁有的Android Studio開(kāi)發(fā)小技巧,介紹幾個(gè)比較好用的技巧和快捷鍵,提升我們的編碼效率,感興趣的小伙伴們可以參考一下2016-06-06

