Android選單詳解——子選單(SubMenu)
阿新 • • 發佈:2019-02-17
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,實現效果:
點選子選單項後的效果,例如點選“檔案”: