MenuItem add(int groupId, int itemId, int order, CharSequence title); SubMenu addSubMenu(final int groupId, final int itemId, int order, final CharSequence title);正確來說,SubMenu 是 MenuItem 的一種延伸,這一點可以從 XML 設定來出端倪來。
menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:orderInCategory="1" android:id="@+id/item1" android:title="壹"></item> <item android:orderInCategory="3" android:id="@+id/item3" android:title="參"></item> <item android:orderInCategory="2" android:id="@+id/item2" android:title="貳..."> <menu> <item android:orderInCategory="5" android:id="@+id/item5" android:title="伍"></item> <item android:orderInCategory="4" android:id="@+id/item4" android:title="肆"></item> </menu> </item> </menu>SubMenu 使用 menu tag,包附在 item tag 裡,這產生有趣的狀況,就是點了 SubMenu 像是點了 MenuItem 一樣,除了可以執行 MenuItem 的內容外,Android 另外會去開啟 SubMenu。
SubMenuActivity
public class SubMenuActivity extends Activity { private Menu menu; private int total; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // 要 keep 下來供後續使用,除了這裡,沒有其他方法可以取得 menu 物件 this.menu = menu; MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item1: this.total += 10; break; case R.id.item2: // 這是 SubMenu 的 id,可以在這做些事情 this.total -= 20; break; case R.id.item3: this.total += 30; break; case R.id.item4: this.total -= 40; break; case R.id.item5: this.total += 50; break; default: // 交給別人來處理,有可能是 system menu return super.onOptionsItemSelected(item); } TextView tv = (TextView) this.findViewById(R.id.tv); tv.setText(tv.getText() + "\n" + item.getTitle() + " -> " + this.total); // 回傳 true 表示已經處理完畢,不用再往外丟了 return true; } }
沒有留言:
張貼留言