Android Menu


Android Menu

1.Android Menu(菜單)分為兩種

  • 選項菜單 OptionMenu

  • 上下文菜單ContextMenu


2. 實現(xiàn)目錄的基本操作

  1. 在xml文件中定義布局文件

  2. 重寫onCreateOptions(或Context)Menu独郎,創(chuàng)建目錄

  3. 重寫onOptions(或Context)ItemSelected秉版,響應(yīng)目錄的點擊事件


3. 目錄xml文件的定義

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_id"
        android:title="menu_title"
        />
   ......
</menu>

代碼1


4. Android Menu的主要方法

4.1 OptionMenu(選項菜單)
> onCreateOptionsMenu(Menu menu     
  創(chuàng)建OptionsMenu

> onOptionsItemSelected(MenuItem Item)  
  監(jiān)聽OptionsMenu的點擊事件
4.2 ContextMenu(上下文菜單)
> onCreateContextMenu(Menu menu )       
  創(chuàng)建ContextMenu

> onContextItemSelected(MenuItem Item)       
  監(jiān)聽ContextMenu的點擊事件

> registerForContextMenu                
  注冊ContextMenu沟娱,在onStart中

> unRegisterForContextMenu             
  注銷ContextMenu株憾,在onStop中

> openContextMenu                   
  在希望ContextMenu出現(xiàn)時調(diào)用,打開ContextMenu

5. 覆寫Menu方法的注意事項

  1. 覆寫onCreateContextMenu或onCreateOptionsMenu時,一定要寫getMenuInflater.inflate(R.Menu.你需要的xml文件 援岩,menu )
  2. 在覆寫Selected方法時贮折,常使用getItemId和switch方法
  3. 在onStart中使用registerForContextMenu
  4. 在onStop中使用unRegisterForContextMenu
5.1 代碼展示(以O(shè)ptionsMenu為例)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    
    getMenuInflater().inflate(R.menu.menu,menu);
    //R.menu.menu是自己創(chuàng)建的目錄xml文件
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch ( id ){
        case R.id.menu_1 :
            Toast.makeText(MainActivity.this,"you click menu_1" ,Toast.LENGTH_LONG).show();
            break;
        case R.id.menu_2 :
            Toast.makeText(MainActivity.this,"you click menu_2" ,Toast.LENGTH_LONG).show();
            break;
        default:
            break;
    }
    return true;
}

代碼2


6. OptionsMenu(選項目錄)

optionsMenu的實現(xiàn)比較簡單,注意點上面已提拳亿,且所要展示的代碼就是代碼2晴股,此處僅補充目錄xml文件代碼

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/menu_1"
        android:title="111"
        />
    <item
        android:id="@+id/menu_2"
        android:title="222"
        />
</menu>

7. ContextMenu(上下文目錄)

7.1 Contextmenu分為兩種
  1. 長按某個控件彈出
  2. 自定義上下文目錄的彈出模式,如在單擊中彈出
7.2 長按控件彈出
  1. 在onStart方法中加入registerForContextMenu為指定控件注冊上下文菜單
  2. 在onStop方法中加入unregisterForContextMenu注銷上下文菜單

長按控件彈出和自定義彈出相比肺魁,只是多出了openContextMenu方法的調(diào)用电湘,所以此處代碼省略,去掉下述代碼中調(diào)用openContextMenu處即可

7.3 自定義彈出模式
  1. 在onStart方法中加入registerForContextMenu為指定控件注冊上下文菜單
  2. 在相應(yīng)的方法中加入openContextMenu鹅经,如在onClickListener中加入寂呛,在單擊事件中彈出
  3. 在onStop方法中加入unregisterForContextMenu注銷上下文菜單

想在什么事件中彈出ContextMenu,就在哪里調(diào)用openContextMenu()

7.4 代碼展示(單擊事件中彈出上下文目錄)
public class MainActivity extends AppCompatActivity {

    Button button;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.main_but);
        //在單擊事件中調(diào)用openContextMenu
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openContextMenu(button);
            }
        });
    }

    //定義ContextMenu的創(chuàng)建方法
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.menu,menu);
    }

    @Override
    protected void onStart() {
        super.onStart();
        registerForContextMenu(button);
        //注冊ContextMenu
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterForContextMenu(button);
        //取消注冊ContextMenu
    }
}

我的個人博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘾晃,一起剝皮案震驚了整個濱河市贷痪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹦误,老刑警劉巖劫拢,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異强胰,居然都是意外死亡舱沧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門偶洋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熟吏,“玉大人,你說我怎么就攤上這事玄窝》指” “怎么了肾筐?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缸剪。 經(jīng)常有香客問我吗铐,道長,這世上最難降的妖魔是什么杏节? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任唬渗,我火速辦了婚禮,結(jié)果婚禮上奋渔,老公的妹妹穿的比我還像新娘镊逝。我一直安慰自己,他們只是感情好嫉鲸,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布撑蒜。 她就那樣靜靜地躺著,像睡著了一般玄渗。 火紅的嫁衣襯著肌膚如雪座菠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天藤树,我揣著相機與錄音浴滴,去河邊找鬼。 笑死岁钓,一個胖子當著我的面吹牛升略,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屡限,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼品嚣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钧大?” 一聲冷哼從身側(cè)響起腰根,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拓型,沒想到半個月后额嘿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡劣挫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年册养,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片压固。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡球拦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坎炼,我是刑警寧澤愧膀,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谣光,受9級特大地震影響檩淋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萄金,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一蟀悦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氧敢,春花似錦日戈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唯袄,卻和暖如春弯屈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背越妈。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工季俩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钮糖,地道東北人梅掠。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像店归,于是被迫代替她去往敵國和親阎抒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容