Android應用開發基礎(避坑)------OptionMenu無法顯示問題

隨着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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章