鍍金池/ 教程/ Android/ 第二十一章-Android菜單之子菜單
第十八章-ViewPager+FragmentStatePagerAdapter實(shí)現(xiàn)仿微信Tab
第十五章-GridView實(shí)現(xiàn)動態(tài)添加和刪除子項(xiàng)
第九章-進(jìn)度條ProgressBar
第十二章-經(jīng)典的ListView
第十四章-GridView控件
第八章-時間相關(guān)控件
第七章-下拉框Spinner控件
第二章-EditText探秘
第二十章-Android菜單之上下文菜單
第十一章-各種對話框Dialog集錦
第二十一章-Android菜單之子菜單
第六章-切換類TextSwitcher和ImageSwitcher
第十七章-ViewPager切換界面
第五章-開關(guān)按鈕ToggleButton和Switch
第二十二章-PopupWindow浮動窗
第十六章-幻燈片ViewFlipper
第二十四章-RecyclerView動態(tài)添加、刪除及點(diǎn)擊事件
第三章-交互之王Button控件
第二十三章-全新控件RecyclerView
第一章-好玩的TextView
第十三章-ListView擴(kuò)展(多選、全選、反選)
第四章-玩轉(zhuǎn)單選和多選按鈕
第十章-可以拖動的ProgressBar-SeekBar
第十九章-Android菜單之選項(xiàng)菜單

第二十一章-Android菜單之子菜單

子菜單和選項(xiàng)菜單比較類似,它的特點(diǎn)是可以將菜單進(jìn)行分組,更方面用戶進(jìn)行選擇和操作。創(chuàng)建子菜單的步驟也大致可以分為三步:

  • 覆寫Activity的onCreateOptionsMenu()方法,調(diào)用Menu類的addSubMenu()方法來添加子菜單。

  • 調(diào)用SubMenu的add()方法,添加子菜單子項(xiàng),add方法有四個參數(shù),同樣也是分組ID、子項(xiàng)ID、子項(xiàng)順序和子項(xiàng)文本信息。

  • 覆寫onContextItemSelected()方法,為子菜單添加選擇事件監(jiān)聽。 和選項(xiàng)菜單類似,子菜單的創(chuàng)建也可以通過兩種方式,即布局文件方式(靜態(tài)方式)和代碼動態(tài)添加(動態(tài)方式)的方式,下面分別進(jìn)行講解。

  • 布局文件方式 子菜單布局文件(menu.xml)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/file"
        android:icon="@mipmap/ic_launcher"
        android:orderInCategory="100"
        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/edit_file"
                android:showAsAction="never"
                android:title="編輯" />
        </menu>
    </item>
    <item
        android:id="@+id/set"
        android:icon="@mipmap/ic_launcher"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="設(shè)置">
        <menu>
            <item
                android:id="@+id/delete_set"
                android:showAsAction="never"
                android:title="刪除" />
            <item
                android:id="@+id/exit_set"
                android:showAsAction="never"
                android:title="退出" />
        </menu>
    </item>
</menu>

這里創(chuàng)建了兩個子菜單項(xiàng):文件操作和設(shè)置,文件操作包括三個子項(xiàng):新建、打開和編輯;設(shè)置包括兩個子項(xiàng):刪除和退出。可以看出不論是子菜單項(xiàng)或者子菜單子項(xiàng)都是由item標(biāo)簽包裹,一個子菜單下的所有子菜單子項(xiàng)由menu標(biāo)簽包裹。

MainActivity代碼(MainActivity.java)

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {//構(gòu)建菜單
        MenuInflater menuInflater=getMenuInflater();
        menuInflater.inflate(R.menu.menu,menu);
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {//菜單選擇事件監(jiān)聽
        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.edit_file:
                Toast.makeText(this,"您選擇了編輯按鈕",Toast.LENGTH_SHORT).show();
                break;
            case R.id.delete_set:
                Toast.makeText(this,"您選擇了刪除按鈕",Toast.LENGTH_SHORT).show();
                break;
            case R.id.exit_set:
                Toast.makeText(this,"您選擇了退出按鈕",Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

在onCreateOptionsMenu中首先調(diào)用getMenuInflater方法獲取MenuInflater

類的對象,然后調(diào)用其inflate方法引入菜單文件,這里需要傳入兩個參數(shù),第一個參數(shù)是菜單資源文件,第二個是Menu對象。

  • 代碼動態(tài)方式 MainActivity代碼(MainActivity.java)
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {//構(gòu)建菜單
        SubMenu file =menu.addSubMenu("文件");//獲得子菜單對象
        file.setHeaderIcon(android.R.drawable.ic_btn_speak_now);
        file.setHeaderTitle("文件操作");
        file.add(1,1,1,"新建");//調(diào)用add方法添加子菜單子項(xiàng)
        file.add(1,2,2,"打開");
        file.add(1,3,3,"編輯");
        SubMenu set =menu.addSubMenu("設(shè)置");
        set.add(1,4,4,"刪除");
        set.add(1,5,5,"退出");
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {//菜單選擇事件監(jiān)聽
        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;
            case 4:
                Toast.makeText(this,"您選擇了刪除按鈕",Toast.LENGTH_SHORT).show();
                break;
            case 5:
                Toast.makeText(this,"您選擇了退出按鈕",Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

調(diào)用menu對象的addSubMenu方法添加一個子菜單,同時這個方法返回一個SubMenu對象,為了便于下面給子菜單添加子項(xiàng),這里使用一個SubMenu對象進(jìn)行接收,添加子菜單子項(xiàng)調(diào)用add方法。

運(yùn)行項(xiàng)目實(shí)例:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/21-1.png" alt="這里寫圖片描述" /> http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/21-2.png" alt="這里寫圖片描述" />