Android Menu
1.Android Menu(菜單)分為兩種
選項菜單 OptionMenu
上下文菜單ContextMenu
2. 實現(xiàn)目錄的基本操作
在xml文件中定義布局文件
重寫onCreateOptions(或Context)Menu独郎,創(chuàng)建目錄
重寫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方法的注意事項
- 覆寫onCreateContextMenu或onCreateOptionsMenu時,一定要寫getMenuInflater.inflate(R.Menu.你需要的xml文件 援岩,menu )
- 在覆寫Selected方法時贮折,常使用getItemId和switch方法
- 在onStart中使用registerForContextMenu
- 在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分為兩種
- 長按某個控件彈出
- 自定義上下文目錄的彈出模式,如在單擊中彈出
7.2 長按控件彈出
- 在onStart方法中加入registerForContextMenu為指定控件注冊上下文菜單
- 在onStop方法中加入unregisterForContextMenu注銷上下文菜單
長按控件彈出和自定義彈出相比肺魁,只是多出了openContextMenu方法的調(diào)用电湘,所以此處代碼省略,去掉下述代碼中調(diào)用openContextMenu處即可
7.3 自定義彈出模式
- 在onStart方法中加入registerForContextMenu為指定控件注冊上下文菜單
- 在相應(yīng)的方法中加入openContextMenu鹅经,如在onClickListener中加入寂呛,在單擊事件中彈出
- 在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
}
}