日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发之选项菜单(optinosMenu)

發布時間:2023/12/20 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发之选项菜单(optinosMenu) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android一共有三種形式的菜單:
? ? ? ? ? ? ? ? ?1.選項菜單(optinosMenu)
? ? ? ? ? ? ? ? ?2.上下文菜單(ContextMenu)
? ? ? ? ? ? ? ? ?3.子菜單(subMenu)

一、選項菜單(optinosMenu)?

? ? ? ? ? ? ? ??選項菜單(optionsMenu), 該菜單在點擊 menu 按鍵 后會在對應的Activity底部顯示出來。

? ? ??

1、一般需要將創建選項菜單的代碼放在onCreateOptionMenu方法中。通過Menu.add方法可以添加一個選項菜單。該方法有4種重載形式,定義如下:

? ? ? ? ? ? ?? menu.add方法的參數:
? ? ? ? ? ? ? ? ? ? ? ?第一個int類型的group ID參數,代表的是組概念,你可以將幾個菜單項歸為一組,以便更好的以組的方式管理你的菜單按鈕。
? ? ? ? ? ? ? ? ? ? ? ?第二個int類型的item ID參數,代表的是項目編號。這個參數非常重要,一個item ID對應一個menu中的選項。在后面使用菜單的時候,就靠這個item ID來判斷你使用的是哪個選項。
? ? ? ? ? ? ? ? ? ? ? ?第三個int類型的order ID參數,代表的是菜單項的顯示順序。默認是0,表示菜單的顯示順序就是按照add的顯示順序來顯示。
? ? ? ? ? ? ? ? ? ? ? ?第四個String類型的title參數,表示選項中顯示的文字。

1、public MenuItem add(CharSequence title); 2、public MenuItem add(int titleRes); 3、public MenuItem add(int groupId, int itemId, int order, int titleRes); 4、public MenuItem add(int groupId, int itemId, int order, CharSequence title);

MainActivity.java文件:

? ? ? ?

menu.add(1,1,1,"菜單一");menu.add(1,2,2,"菜單二");menu.add(1,3,3,"菜單三");menu.add(1,4,4,"菜單四");

效果圖:

? ??

2、為菜單添加圖標

? ??在Android4.0系統中,創建菜單Menu,通過setIcon方法給菜單添加圖標是無效的,圖標沒有顯出來,2.3系統中是可以顯示出來的。這個問題的根本原因在于4.0系統中,涉及到菜單的源碼類 MenuBuilder做了改變,該類的部分源代碼如下:

public class MenuBuilder implements Menu { ...private boolean mOptionalIconsVisible = false; ....void setOptionalIconsVisible(boolean visible) {mOptionalIconsVisible = visible;}boolean getOptionalIconsVisible() {return mOptionalIconsVisible;} ... }

? ? ? ? ?上面的代碼中,mOptionalIconsVisible成員初始值默認為false,這就是為什么給菜單設置圖標沒有效果的原因;所以,只要我們在創建菜單時通過調用setOptionalIconsVisible方法設置mOptionalIconsVisible為true就可以了;這時候問題來了,要想調用該方法,就需要創建MenuBuilder對象,但是,我們是無法在開發的應用程序中創建MenuBuilder這個對象(MenuBuilder為系統內部的框架類)。

  這時候就需要考慮用反射了,在代碼運行創建菜單的時候通過反射調用setOptionalIconsVisible方法設置mOptionalIconsVisible為true,然后在給菜單添加Icon,這樣就可以在菜單中顯示添加的圖標了。

public boolean onCreateOptionsMenu(Menu menu) {
//
Inflate the menu; this adds items to the action bar if it is present. setIconEnable(menu, true); //調用這句實現顯示ICON getMenuInflater().inflate(R.menu.main, menu); menu.add(1,1,1,"菜單一").setIcon(R.drawable.tabbar_me);menu.add(1,2,2,"菜單二").setIcon(R.drawable.tabbar_mainframehl);menu.add(1,3,3,"菜單三").setIcon(R.drawable.tabbar_mainframe);menu.add(1,4,4,"菜單四" ).setIcon(R.drawable.tabbar_mainframehl); return true;} //enable為true時,菜單添加圖標有效,enable為false時無效。4.0系統默認無效 private void setIconEnable(Menu menu, boolean enable)
{
try { Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder"); Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(
true); //MenuBuilder實現Menu接口,創建菜單時,傳進來的menu其實就是MenuBuilder對象(java的多態特征

m.invoke(menu, enable); }catch(Exception e){
e.printStackTrace();
} }

效果圖:

? ? ? ?

3、實現菜單點擊效果:

? ? ? ? ? ? ? ? ? ? ?①設置點擊事件:通過調用MenuItem.setOnMenuItemClickListener方法可以設置菜單項的單擊事件,該方法有一個OnMenuItemClickListener類型的參數類型的參數,處理菜單項的單擊事件類必須實現setOnMenuItemClickListener接口。

? ? ? ? ? ? ? ? ? ? ??②setOnMenuItemClickListener()方法,繼承實現setOnMenuItemClickListener接口。

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ??③通過getItemId()獲取menu中的選項對應item ID,可以用來做判斷,在判斷里面寫相關的代碼。

public boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.//調用這句實現顯示ICON
setIconEnable(menu, true);

getMenuInflater().inflate(R.menu.main, menu); Me nuItem item = menu.add(1,1,1,"菜單一").setIcon(R.drawable.tabbar_me); menu.add(1,2,2,"菜單二").setIcon(R.drawable.tabbar_mainframehl);menu.add(1,3,3,"菜單三").setIcon(R.drawable.tabbar_mainframe);menu.add(1,4,4,"菜單四").setIcon(R.drawable.tabbar_mainframehl);item.setOnMenuItemClickListener(this); return true;}public boolean onMenuItemClick(MenuItem item) { if(item.getItemId()==1){ Toast.makeText(MainActivity.this, "點擊了菜單項1", Toast.LENGTH_SHORT).show(); } return false; } //enable為true時,菜單添加圖標有效,enable為false時無效。4.0系統默認無效 private void setIconEnable(Menu menu, boolean enable)
{

try{
Class
<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
Method m
= clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);
m.setAccessible(
true);
//MenuBuilder實現Menu接口,創建菜單時,傳進來的menu其實就是MenuBuilder對象(java的多態特征
m.invoke(menu, enable);
}catch(Exception e){
e.printStackTrace(); } }

效果圖:

? ? ? ?

?

轉載于:https://www.cnblogs.com/wdht/p/6099582.html

總結

以上是生活随笔為你收集整理的Android开发之选项菜单(optinosMenu)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。