所謂Menu有什么用的?當然是為了節(jié)省界面的空間,讓屏幕的空間得到合理的利用,Menu有兩種,一種是options menu,一種是Context Menu。
一、options Menu
1、在res目錄下創(chuàng)建menu文件夾,然后在該文件夾中創(chuàng)建一個新的Menu Resource File,比如叫main。
2、在main.xml中書寫所需要的代碼。
(1)每一個Menu的菜單項,都使用一個<item>標簽來包裹。
(2)通過android:id來給每一個菜單項指定一個唯一的標識符
(3)通過android:titile來個每一個菜單項指定一個名稱
<item android:id="@+id/item_add"
android:title="@string/str_addItem"/>
<item android:id="@+id/item_delete"
android:title="@string/str_deleteItem"/>
3、到對應的Activity中重寫相對應的方法。
(1)重寫onCreateOptionsMenu()方法。
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
在該方法中通過getMenuInflater()方法獲得MenuInflater對象,然后再調用inflate()方法來給當先的Activity創(chuàng)建菜單。其中,inflate()方法傳入兩個參數,第一個是我們要用來創(chuàng)建菜單的資源文件,比如前面的main.xml,第二個是用于制動菜單創(chuàng)建到哪一個Menu對象中,這里我們可以直接使用onCreateOptionsMenu()方法中傳入的menu參數。最后,給這個方法返回true表示允許菜單顯示,如果返回false,則創(chuàng)建的菜單無法顯示。
(2)重寫onOptionsItemSelected()方法
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.item_add:
Toast.makeText(this, "You Click Add Item!!", Toast.LENGTH_SHORT).show();
break;
case R.id.item_delete:
Toast.makeText(this, "You Click Delete Item!!", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
最后,效果如下:



二、Context Menu
首先,第1,2步與options Menu一樣,先創(chuàng)建以及編寫資源文件。
3、到對應的Activity中去重寫相對應的方法和邏輯。
(1)重寫onCreateContextMenu()方法。
與options Menu一樣,調用getMenuInflater()方法中的inflate()方法,inflate()中,同樣需要傳入2個參數,一個是要以哪個資源文件為模板去創(chuàng)建menu,另一個是把menu創(chuàng)建到哪里去。與options Menu不一樣的是,Context Menu不需要return true。
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.context_menu,menu);
}
(2)重寫onContextItemSelected()的方法
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.item_hello:
Toast.makeText(this, "You choose Hello", Toast.LENGTH_SHORT).show();
break;
case R.id.item_goodBye:
Toast.makeText(this, "You choose goodBye", Toast.LENGTH_SHORT).show();
}
return true;
}
(3)在onStart()方法中調用registerForContextMenu()
@Override
protected void onStart() {
registerForContextMenu(mContextMenuButton);
super.onStart();
}
(4)在onStop()中調用unregisterForContextMenu()
@Override
protected void onStop() {
unregisterForContextMenu(mContextMenuButton);
super.onStop();
}
(5)在需要顯示出Context menu的控件中調用openContextMenu()
mContextMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openContextMenu(mContextMenuButton);
}
});
4、效果展示

點擊按鈕出現Cntext Menu

