線上服務(wù)咨詢
Article/文章
記錄成長(zhǎng)點(diǎn)滴 分享您我感悟
您當(dāng)前位置>首頁(yè) > 知識(shí) > 網(wǎng)站建設(shè)
Android中的詳細(xì)菜單欄
發(fā)表時(shí)間:2019-07-30 16:15:34
文章來(lái)源:沈陽(yáng)軟件開(kāi)發(fā)
標(biāo)簽:網(wǎng)站建設(shè) 小程序開(kāi)發(fā) 小程序制作 微信小程序開(kāi)發(fā) 公眾號(hào)開(kāi)發(fā) 微信公眾號(hào)開(kāi)發(fā) 網(wǎng)頁(yè)設(shè)計(jì) 網(wǎng)站優(yōu)化 網(wǎng)站排名 網(wǎng)站設(shè)計(jì) 微信小程序設(shè)計(jì) 小程序定制 微信小程序定制
瀏覽次數(shù):0
理解Android的菜單
選項(xiàng)菜單:最常見(jiàn)的菜單,在android中稱為選項(xiàng)菜單
子菜單:?jiǎn)螕鬭ndroid中的子菜單將彈出浮動(dòng)窗口以顯示子菜單項(xiàng)。子菜單不支持嵌套,也就是說(shuō),子菜單中不能包含其他子菜單。
上下文菜單:android長(zhǎng)按菜單后視圖控件,windows右鍵單擊彈出菜單是上下文菜單
圖標(biāo)菜單:這個(gè)比較簡(jiǎn)單,是帶圖標(biāo)的菜單項(xiàng),需要注意子菜單項(xiàng)、上下文菜單項(xiàng)、擴(kuò)展菜單項(xiàng)均無(wú)法顯示圖標(biāo)。
替代菜單:使用較少,后來(lái)單獨(dú)介紹,本文首先跳過(guò)(事實(shí)上,我還沒(méi)想出來(lái)o(≧v≦)o ~~)
擴(kuò)展菜單:選項(xiàng)菜單最多只能顯示6個(gè)菜單項(xiàng)。當(dāng)有超過(guò)6個(gè)項(xiàng)目時(shí),第6個(gè)菜單項(xiàng)將被系統(tǒng)替換為名為“更多”的子菜單。原始菜單項(xiàng)不會(huì)顯示。
“更多”菜單的子菜單項(xiàng)。如下圖所示
每個(gè)活動(dòng)都包含一個(gè)菜單。菜單可以包含多個(gè)菜單項(xiàng)和多個(gè)子菜單。子菜單也是一個(gè)菜單(因?yàn)樗鼘?shí)現(xiàn)了菜單界面),因此子菜單也可以包含多個(gè)菜單項(xiàng)。 OnCreateOptionsMenu()和OnOptionsMenuSelected()是用于創(chuàng)建菜單項(xiàng)和響應(yīng)菜單項(xiàng)單擊的活動(dòng)中提供的兩種回調(diào)方法
1,創(chuàng)建options menu ?選項(xiàng)菜單
[java]查看plaincopy
@override
publicbooleanonCreateOptionsMenu(Menumenu){
//與未來(lái)版本兼容
super.onCreateOptionsMenu(菜單);
//以多種方式添加菜單項(xiàng)
//menu.add('menu item 1'); //1,直接指定標(biāo)題,我不知道如何調(diào)用此響應(yīng)
//menu.add(R.string.menuitem2);//2,按資源指定標(biāo)題
Menu.add(1,Menu.FIRST,1,'menu item 1'); //3,明確指定菜單項(xiàng)的組號(hào),ID,排序,標(biāo)題
Menu.add(1,Menu.FIRST + 1,2,'菜單項(xiàng)2');
Menu.add(2,Menu.FIRST + 2,3,'菜單項(xiàng)3');
Menu.add(2,Menu.FIRST + 3,4,'菜單項(xiàng)4');
Menu.add(2,Menu.FIRST + 4,5,'菜單項(xiàng)5');
Menu.add(2,Menu.FIRST + 5,6,'菜單項(xiàng)6'); //超過(guò)6將被系統(tǒng)中的更多單詞替換
Menu.add(2,Menu.FIRST + 6,7,'菜單項(xiàng)7');
Menu.add(2,Menu.FIRST + 7,8,'菜單項(xiàng)8');
[java]查看plaincopy
Returntrue; //如果你想要真正的菜單,返回true
響應(yīng)菜單項(xiàng)
最常用的方法是覆蓋活動(dòng)類的onOptionsItemSelected(MenuItem)回調(diào)方法。每當(dāng)單擊一個(gè)菜單項(xiàng)時(shí),android將調(diào)用該方法并傳入單擊的菜單項(xiàng)。
以下代碼可用作使用onOptionsItemSelected方法響應(yīng)菜單的模板。為方便起見(jiàn),菜單ID在程序中硬編碼。您可以使用常量或資源ID來(lái)使代碼更健壯
[java]查看plaincopy
@override
publicbooleanonOptionsItemSelected(MenuItemitem){
開(kāi)關(guān)(item.getItemId()){
案例1:
//DoSomething的
Toast.makeText(this,'1',Toast.LENGTH_LONG).show();
打破;
案例2:
Toast.makeText(this,'2',Toast.LENGTH_LONG).show();
打破;
案例3:
Toast.makeText(this,'3',Toast.LENGTH_LONG).show();
打破;
案例4:
Toast.makeText(this,'4',Toast.LENGTH_LONG).show();
打破;
默認(rèn)值:
returnsuper.onOptionsItemSelected(項(xiàng)目);
}
Returntrue;
}
使用監(jiān)聽(tīng)器響應(yīng)菜單項(xiàng)
雖然上面的方法是推薦的方法,但android仍然提供了一種類似于swing的偵聽(tīng)器方式來(lái)響應(yīng)菜單。使用偵聽(tīng)器的方法分為兩步:
[java]查看plaincopy
//步驟1:為菜單項(xiàng)
注冊(cè)監(jiān)聽(tīng)器menuItem.setOnMenuItemClickListener(newMyMenuItemClickListener());
//第2步:創(chuàng)建一個(gè)監(jiān)聽(tīng)器類
classMyMenuItemClickListenerimplementsOnMenuItemClickListener {
@override
publicbooleanonMenuItemClick(MenuItemitem){
開(kāi)關(guān)(){
//dosomethinghere .
}
Returntrue; //finishhandling
}
}
此方法在onOptionsItemSelected執(zhí)行之前。
[java]查看plaincopy
2,子菜單Sub?Menu
Android支持子菜單,您可以通過(guò)addSubMenu(intgroupId,intitemId,intorder,inttitleRes)方法輕松創(chuàng)建和響應(yīng)子菜單。[java]查看plaincopy
@override
publicbooleanonCreateOptionsMenu(Menumenu){
//與未來(lái)版本兼容
super.onCreateOptionsMenu(菜單);
//添加子菜單
//菜單可以有多個(gè)子菜單
menu.addSubMenu(1,Menu.FIRST,1,'系統(tǒng)設(shè)置');
SubMenusubMenu=menu.addSubMenu(1,Menu.FIRST + 1,2,'網(wǎng)絡(luò)設(shè)置'); //子菜單支持圖標(biāo)
subMenu.setIcon(R.drawable.ic_launcher);
MenuItemmenuItem=subMenu.add(2,Menu.FIRST + 2,Menu.NONE,'menu item 1'); //子菜單項(xiàng)不支持顯示圖標(biāo)
//menuItem.setIcon(R.drawable.ic_launcher);
subMenu.add(2,Menu.FIRST + 3,Menu.NONE,'menu item 2');
subMenu.add(2,Menu.FIRST + 4,Menu.NONE,'menu item 3');
subMenu.add(2,Menu.FIRST + 5,Menu.NONE,'menu item 4');
Returntrue; //如果你想要真正的菜單,返回true
}
上面的代碼演示了如何創(chuàng)建一個(gè)子菜單,其對(duì)菜單項(xiàng)的響應(yīng)實(shí)際上是普通菜單項(xiàng)的響應(yīng)
3,圖標(biāo)菜單Icon Menu
Android支持在菜單上顯示各種圖標(biāo),我們?cè)趧?chuàng)建
上面的子菜單時(shí)已經(jīng)使用過(guò)這些圖標(biāo)[java]查看plaincopy
SubMenusubMenu=menu.addSubMenu(1,Menu.FIRST + 1,2,'網(wǎng)絡(luò)設(shè)置'); //子菜單支持圖標(biāo)
subMenu.setIcon(R.drawable.ic_launcher);
Android并不意味著菜單項(xiàng)可以添加圖標(biāo)。不允許使用以下菜單項(xiàng)(這并不意味著程序?qū)?bào)告錯(cuò)誤,但不會(huì)顯示運(yùn)行時(shí)圖標(biāo)):
擴(kuò)展菜單項(xiàng)。
子菜單的菜單項(xiàng)
上下文菜單的菜單項(xiàng)
4,ContextMenu簡(jiǎn)介
在Windows中,我們習(xí)慣右鍵單擊文件以執(zhí)行“打開(kāi)”,“重命名”,“剪切”,“刪除”等操作。右鍵單擊菜單是上下文菜單。
Android是通過(guò)長(zhǎng)按視圖元素來(lái)彈出上下文菜單。
上下文菜單和“選項(xiàng)”菜單之間的最大區(qū)別在于“選項(xiàng)”菜單的所有者是“活動(dòng)”,上下文菜單的所有者是“活動(dòng)”中的“視圖”。每個(gè)活動(dòng)都有一個(gè)且只有一個(gè)選項(xiàng)菜單,它為整個(gè)活動(dòng)提供服務(wù)。并且一個(gè)Activity通常有多個(gè)Views,而不是每個(gè)View都有一個(gè)上下文菜單,這需要我們通過(guò)
顯示registerForContextMenu(Viewview)指定。
這是一個(gè)演示如何創(chuàng)建和響應(yīng)上下文菜單的演示:
1.在活動(dòng)的onCreate(.)方法
中注冊(cè)視圖的上下文菜單2.在onCreateContextMenuInfo(.)中生成上下文菜單。
3.響應(yīng)onContextItemSelected(.)中的上下文菜單項(xiàng)。
[java]查看plaincopy
publicclassMenuDemoActivityextendsActivity {
privateListViewlistView;
@override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
initView(); //做一些初始化工作
}
privatevoidinitView(){
的ListView=(ListView中)this.findViewById(R.id.listview);
listView.setAdapter(newMyAdapter());
this.registerForContextMenu(listView); //1為所有列表項(xiàng)注冊(cè)上下文菜單,與響應(yīng)事件不同
}
//向ListView提供一些數(shù)據(jù)
privateclassMyAdapterextendsBaseAdapter {
publicintgetCount(){
Return5;
}
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
Returnnull;
}
publiclonggetItemId(intposition){
//TODOAuto-generatedmethodstub
Return0;
}
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
TextViewtv=newTextView(MenuDemoActivity.this);
tv.setText( '文件' +位);
Returntv;
}
}
@override
//2C創(chuàng)建一個(gè)上下文菜單
publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
ContextMenuInfomenuInfo){
super.onCreateContextMenu(菜單,V,menuInfo);
menu.setHeaderTitle('file operation');
Menu.add(1,Menu.FIRST,Menu.NONE,'send');
Menu.add(1,Menu.FIRST + 1,Menu.NONE,'標(biāo)記為重要');
Menu.add(1,Menu.FIRST + 2,Menu.NONE,'Rename');
Menu.add(1,Menu.FIRST + 3,Menu.NONE,'delete');
}
@override
//3響應(yīng)上下文菜單
publicbooleanonContextItemSelected(MenuItemitem){
開(kāi)關(guān)(item.getItemId()){
案例1:
Toast.makeText(this,'send',1).show();
打破;
案例2:
Toast.makeText(這個(gè),'標(biāo)記為重要',1).show();
打破;
案例3:
Toast.makeText(this,'rename',1).show();
打破;
案例4:
Toast.makeText(this,'delete',1).show();
打破;
默認(rèn)值:
returnsuper.onContextItemSelected(項(xiàng)目);
}
Returntrue;
}
}
運(yùn)行程序,多次調(diào)用上下文菜單,注意LogCat的輸出,每次都調(diào)用onCreateContextMenu。
標(biāo)簽:& nbsp& nbsp沈陽(yáng)app開(kāi)發(fā)&營(yíng)銷類型網(wǎng)站建設(shè)& nbsp沈陽(yáng)App設(shè)計(jì)& nbspAndroid菜單欄詳細(xì)說(shuō)明網(wǎng)站建設(shè),小程序開(kāi)發(fā),小程序制作,微信小程序開(kāi)發(fā),公眾號(hào)開(kāi)發(fā),微信公眾號(hào)開(kāi)發(fā),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站優(yōu)化,網(wǎng)站排名,網(wǎng)站設(shè)計(jì),微信小程序設(shè)計(jì),小程序定制,微信小程序定制