メニューアイテムを隠す

アクションバーに表示されるメニューアイテムをボタンを押したときなどの特定のタイミングで隠す方法を紹介します。

まず、次のようなメニューレイアウトを作ります。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/menu_setting" 
        android:title="@string/setting_str" 
        android:icon="@drawable/setting" 
        android:showAsAction="always" /gt;
</menu>

このアイテムを1つだけ持つメニューレイアウトをアクションバーに設定し、アイテムの表示・非表示を切り替えられるボタンを作ります。

public class MainActivity extends Activity
{
    public Menu menu;
        //メニューを保存する変数

    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void onStart()
    {
        super.onStart();
        
        Button menu_show_btn = (Button)findViewById(R.id.show_button);
        Button menu_hide_btn = (Button)findViewById(R.id.hide_button);
        menu_show_btn.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View v) 
            {
                menu.getItem(0).setVisible(true);
                    //メニューを表示
            }
        });
        menu_hide_btn.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View v) 
            {
                menu.getItem(0).setVisible(false);
                    //メニューを非表示
            }
        });
    }

    //メニューの作成
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        this.menu = menu;
        return super.onCreateOptionsMenu(menu);
    }
}

メニューを取得するメソッドは用意されていないのでonCreateOptionsMenu内で作成されたメニューを

public Menu menu;

などとしてグローバルな変数に保存します。

アイテムを非表示にしているのが次のコードです。

menu.getItem(0).setVisible(false);

保存したメニューから0番目のアイテムを取得し、そのアイテムをsetVisivilityメソッドで非表示にするだけです。

上の例ではonStartメソッド内でメニューアイテムを隠すボタンと表示するボタンの2つを用意し、アイテムの表示を切り替えられるようにしています。

メニューアイテムを隠すボタンを押している画像 メニューアイテムが消えた時の画像

上の画像のように非表示ボタンを押すと歯車マークのアイテムが隠れます。

また、表示ボタンを押すとそのアイテムが元通りに表示されます。

関連項目
プライバシーポリシー