Android menu 簡單建立

來源:互聯網
上載者:User

標籤: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 簡單建立

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.