隨着Android的技術深入,很多組件會因爲很少人使用會被淘汰,也有一些保留着藏着坑的一些組件,由於課堂學習的需要,我們又不得不去接觸到這些組件,今天就來談一談OptionMenu。
OptionMenu是選項菜單,選項菜單可以內嵌子菜單使用。
- 遇到的坑與解決思路
在開發中,寫Activity時,我習慣於讓控制界面顯示的類繼承於Activity,發現菜單無法顯示,一度以爲是SDK版本過新,或者是虛擬器版本已淘汰選項菜單,通過調低這些開發環境都沒能夠顯示出來。
(無法顯示)
最後,我通過讓界面顯示類繼承AppCompatActivity實現了顯示,現在的選項菜單會默認在右上角顯示,而舊版本出現在底部。
- 實現效果:
(正常顯示)
總結:在實驗中,你會發現onCreateOptionsMenu方法和onOptionsItemSelected方法都是AppCompatActivity和Activity類中存在的,但是在頁面創建時,AppCompatActivity會默認調用該方法,而Activity則不會。
- 關於OptionMenu完整功能實現實例
OptionMenuActivity類
package com.example.applicationfi.lab5;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.example.applicationfi.R;
public class OptionMenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_context_menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater=new MenuInflater(ContextMenuActivity.this);
menuInflater.inflate(R.menu.subcontext,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.boy0:
case R.id.boy1:
setTitle("您選擇的男歌手:"+item.getTitle());
break;
case R.id.girl0:
case R.id.girl1:
setTitle("您選擇的女歌手:"+item.getTitle());
break;
case R.id.group0:
case R.id.group1:
setTitle("您選擇的組合:"+item.getTitle());
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
subcontext.xml存放OptionMenu數據
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" android:icon="@drawable/person_add">
<item android:id="@+id/boys" android:title="男歌手" android:orderInCategory="100" android:icon="@drawable/person_add"
>
<menu>
<item android:id="@+id/boy0" android:title="TFBOYS"/>
<item android:title="BEYOND" android:id="@+id/boy1"/>
</menu>
</item>
<item android:id="@+id/girls" android:title="女歌手" android:orderInCategory="100" android:icon="@drawable/person_add">
<menu>
<item android:id="@+id/girl0" android:title="譚維維"/>
<item android:title="王菲" android:id="@+id/girl1"/>
</menu>
</item>
<item android:id="@+id/group" android:title="組合" android:orderInCategory="100" android:icon="@drawable/person_add">
<menu>
<item android:id="@+id/group0" android:title="唐朝樂隊"/>
<item android:title="蘇打綠" android:id="@+id/group1"/>
</menu>
</item>
</menu>