標籤:and iba draw void 目錄 ble his 選中 檔案中
在android 中與menu相關的類有4個:
Menu:菜單的父視窗,用於建立一個菜單,是subMenu,ContentMenu,MenuItem等的父介面;SubMenuyo用於建立子功能表,ContentMenu用於建立操作功能表,MenuItem用於建立一個功能表項目。
Menu菜單開發的基本思路:1、用onCreateOptionsMenu(Menu menu)(適用於選項菜單,或者用nCreateContentMenu(ContentMenu contentmenu,View source,ContentMenuInfo info)適用於操作功能表) 建立菜單,在改方法中調用Menu對象的方法來添加功能表項目或者子功能表;2、重寫Activity的OnOptionsMenuSelected()(適用於選項菜單,OnContentItemSelected()方法,適用於操作功能表)方法相應事件。
菜單有3種類型:
一、選項菜單(普通Menu菜單)
所謂普通Menu菜單即點擊手機Menu鍵彈出的菜單,簡單的建立選項菜單,代碼如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//getMenuInflater().inflate(R.menu.mainmenu,menu);//通過xml檔案建立菜單,其中R.menu.mainmenu問menu檔案加下定義的xml檔案。
menu.add(0,0,0,"菜單測試");//用代碼添加一個菜單選項
menu.add(0,1,0,"文本設定");
SubMenu submenu = menu.addSubMenu(0,6,0,"子功能表測試");//添加一個子功能表
submenu.add(0,2,0,"我是子功能表1");//添加一個子功能表項
submenu.add(0,3,0,"我是子功能表2");
submenu.add(0,4,0,"我是子功能表3");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//return super.onOptionsItemSelected(item);
switch(item.getItemId()){
case 0:
Toast.makeText(this,"菜單測試",Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this,"文本設定",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this,"我是子功能表1",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this,"我是子功能表2",Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(this,"我是誰?",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
}
二、操作功能表
當長按某個控制項時彈出的菜單稱為操作功能表(類似單擊滑鼠右鍵彈出的菜單),必須事先對該控制項註冊一個操作功能表,步驟:
在activity_main.xml檔案中添加一個Button,並對其註冊操作功能表。
1、對要註冊操作功能表的控制項註冊操作功能表,例如registerForContextMenu(button);
2、重寫onCreateContentMenu()方法,並在方法內建立功能表項目;
3、重寫onContentItemSelected()方法處理菜單點擊事件,
簡單範例程式碼如下:
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button);
registerForContextMenu(btn);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
// super.onCreateContextMenu(menu, v, menuInfo);
if (v.getId() == R.id.button) {
menu.add(0, 0, 0, "操作功能表測試");
menu.add(0, 1, 0, "操作功能表測試1");
menu.add(0, 2, 0, "操作功能表測試2");
menu.setGroupCheckable(0, true, true);//設定3個功能表項目設為單選功能表項目
menu.setHeaderTitle("選擇背景顏色"); //設定操作功能表的標題、表徵圖
// menu.setHeaderIcon(R.drawable.tt); //設定操作功能表表徵圖
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
//return super.onContextItemSelected(item);
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "操作功能表測試", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "操作功能表測試1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "操作功能表測試2", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
}
三、彈出式菜單:
popUpMenu代表彈出式菜單,它會在指定組件上彈出,會顯示在該組件的上方或者下方。感覺功能可以用listDialog替代,不知哪個更好。
Android中建立menu有2種方式:
一、使用xml定義menu
在res/menu目錄中定義菜單檔案,如menu1.xml檔案,菜單檔案必須以<menu>為根節點,<menu>標籤沒有任何屬性,但可以嵌套在<item>中表示子功能表。
菜單中常用三個標籤<menu>、<item>、<group>,
1.1 <item>表示一個菜單選項,不可以嵌套,有如下幾個常用屬性:
1.1.1 id 表示菜單選項的資源ID,
1.1.2 tittle設定功能表項目標題
1.1.3 Android:icon設定功能表項目表徵圖
1.1.4 Android:checkable,設定功能表項目是否可選;
1.1.5 Android:checked,設定功能表項目是否已經選中
1.1.5Android:visibale設定功能表項目是否課件;
1.2 <group>元素,用於建立一組功能表項目,在建立一個子功能表時使用,常用屬性
Android:checkablebehavior設定所屬子功能表項是單選還是多選,值可以是“single”等。
1.3 開發基本路徑
1.3.1 建立xml檔案,建立一個AndroidSourcedirection,名字為menu,並建立好xml檔案,
1.3.2 重寫Activity的onCreateOptionsMenu()或者OncreateContentMenu()方法,並在方法中通過getMenuInflater().inflate()方法通過XML構建menu,
1.3.3 重寫onoptionselected()方法或者oncontentitemselected()方法相應事件。
1.4 代碼
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id = "@+id/menuid1"
android:title = "測試1"/>
<item android:id = "@+id/menuid2"
android:title = "測試1"/>
</menu>
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button);
registerForContextMenu(btn);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
MenuInflater inflator=new MenuInflater(this); //執行個體化一個MenuInflater對象
inflator.inflate(R.menu.testmenu, menu); //將xml對應的菜單資源添加到menu中
//menu.setHeaderIcon(R.drawable.color); //設定操作功能表表徵圖
menu.setHeaderTitle("請選擇背景顏色"); //設定操作功能表標題
}
@Override
public boolean onContextItemSelected(MenuItem item) {
//return super.onContextItemSelected(item);
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "操作功能表測試", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "操作功能表測試1", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "操作功能表測試2", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
}
Android menu 簡單建立