1. 程式人生 > >Android選單詳解——子選單(SubMenu)

Android選單詳解——子選單(SubMenu)

1,子選單就是將功能相同或相似的分組進行多級顯示的一種選單。

2,建立子選單的步驟:

a) 覆蓋Activity的onCreateOptionsMenu()方法,呼叫Menu的addSubMenu()方法來新增子選單

b) 呼叫SubMenu的add()方法,新增子選單

c) 覆蓋onContextItemSelected()方法,響應子選單的單擊事件

3,使用程式碼動態新增SubMenu子選單:

<pre name="code" class="java"><span style="font-size:18px;">package com.example.submenu;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    /*
     *設定menu子選單顯示的內容
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        //getMenuInflater().inflate(R.menu.main, menu);
    
    //通過addSubMenu方法新增兩個子選單
    SubMenu file=menu.addSubMenu("檔案");
    SubMenu edit=menu.addSubMenu("編輯");
    //設定file子選單中的內容(設定GroupId為1)
    file.add(1, 1, 1, "新建");
    file.add(1, 2, 1, "開啟");
    file.add(1, 2, 1, "儲存");
    file.setHeaderTitle("檔案操作");  //設定子選單的標題
    file.setHeaderIcon(R.drawable.ic_launcher);  //設定標題旁的圖片
    //設定edit子選單中的內容(設定GroupId為2)
    edit.add(2, 1, 1, "複製");
    edit.add(2, 2, 1, "貼上");
    edit.add(2, 3, 1, "剪下");
    edit.setHeaderTitle("編輯操作");
    edit.setHeaderIcon(R.drawable.ic_launcher);
        return true;
    }
    /*
     * 設定選單項的點選事件
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // 通過GroupId來判斷是哪一個子選單
    if (item.getGroupId()==1) {
    //通過ItemId來判斷選中的是子選單中的哪一項
	switch (item.getItemId()) {
		case 1:
			Toast.makeText(this, "點選了新建", Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(this, "點選了開啟", Toast.LENGTH_SHORT).show();
			break;
		case 3:
			Toast.makeText(this, "點選了儲存", Toast.LENGTH_SHORT).show();
			break;
		}
		}else if(item.getGroupId()==2){
		switch (item.getItemId()) {
		case 1:
			Toast.makeText(this, "點選了複製", Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(this, "點選了貼上", Toast.LENGTH_SHORT).show();
			break;
		case 3:
			Toast.makeText(this, "點選了剪下", Toast.LENGTH_SHORT).show();
			break;
		}
	}
    return super.onOptionsItemSelected(item);
    }
}</span>

4,使用XML新增SubMenu子選單(在res的menu中編寫程式碼):

<span style="font-size:18px;"><menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:showAsAction="never"
        android:title="檔案">
        <menu>
            <item
                android:id="@+id/new_file"
                android:showAsAction="never"
                android:title="新建"/>
            <item
                android:id="@+id/open_file"
                android:showAsAction="never"
                android:title="開啟"/>
            <item
                android:id="@+id/save_file"
                android:showAsAction="never"
                android:title="儲存"/>
            
        </menu>
</item>

    <item
        android:showAsAction="never"
        android:title="編輯">
        <menu>
            <item
                android:id="@+id/c_edit"
                android:showAsAction="never"
                android:title="複製"/>
            <item
                android:id="@+id/v_edit"
                android:showAsAction="never"
                android:title="貼上"/>
            <item
                android:id="@+id/x_edit"
                android:showAsAction="never"
                android:title="剪下"/>
        
        </menu>
</item>
</menu></span>

5,使用XML新增SubMenu子選單時MainActivity中的程式碼:

<pre name="code" class="java"><span style="font-size:18px;">package com.example.submenu;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Toast;

public class MainActivity extends Activity{

 @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
   }
 @Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {

 //super.onCreateContextMenu(menu, v, menuInfo);
 MenuInflater inflater=getMenuInflater();
 inflater.inflate(R.menu.main, menu);
}
 @Override
public boolean onOptionsItemSelected(MenuItem item) {

 switch (item.getItemId()){
	case R.id.new_file:
		Toast.makeText(this, "點選了新建", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.open_file:
		Toast.makeText(this, "點選了開啟", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.save_file:
		Toast.makeText(this, "點選了儲存", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.c_edit:
		Toast.makeText(this, "點選了複製", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.v_edit:
		Toast.makeText(this, "點選了貼上", Toast.LENGTH_SHORT).show();
		break;
	
	case R.id.x_edit:
		Toast.makeText(this, "點選了剪下", Toast.LENGTH_SHORT).show();
		break;
	}
	return super.onOptionsItemSelected(item);
	}
}</span>

6,實現效果:


點選子選單項後的效果,例如點選“檔案”: