AndroidのナビゲーションバーにあるオーバーフローメニューOverflowMenu

ツールバーシリーズの記事のナビゲーション

Androidのナビゲーションバーでのツールバーの使用

AndroidのナビゲーションバーにあるオーバーフローメニューOverflowMenu

Androidのナビゲーションバーの検索ボックスSearchView

Androidのナビゲーションバーのカスタムナビゲーションレイアウト

AndroidでのナビゲーションバーのタブナビゲーションとTabLayoutの使用法

前回ツールバーの使い方についてお話しましたが、今回はオーバーフローメニューの使い方についてお話しました。オーバーフローメニューとは何ですか?簡単なポイントは、ツールバーの右側にあるアイコンのコレクションです。前述のコンテキストメニューに似ていますが、今回は追加のshowAsActionオプションがあるため、最初にこの属性のオプションの値をリストします。

配置タイプ 説明
常に ナビゲーションバーには常にメニューアイコンを表示してください
ifRoom ナビゲーションバーの右側にスペースがある場合、アイテムはナビゲーションバーに直接表示され、オーバーフローメニューは配置されません。
決して ナビゲーションバーに直接表示しないでください。常にオーバーフローメニューリストに表示してください。
withText アイコンに加えて、ナビゲーションバーに表示できる場合は、アイテムの説明テキストも表示する必要があります
折りたたみアクションビュー 操作ビューはボタンに折りたたむ必要があります。ボタンをクリックして操作ビューを展開します。これは主にSearchViewで使用されます。

サンプルコードは次のとおりです。

まず、res--menuパッケージにmenu_overflow.xmlファイルを作成します。コードは次のとおりです。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/menu_refresh"
        android:orderInCategory="1"
        android:icon="@mipmap/ic_refresh"
        app:showAsAction="never"
        android:title="刷新"/>

    <item
        android:id="@+id/menu_about"
        android:orderInCategory="8"
        android:icon="@mipmap/ic_about"
        app:showAsAction="never"
        android:title="关于"/>
    
    <item
        android:id="@+id/menu_quit"
        android:orderInCategory="9"
        android:icon="@mipmap/ic_quit"
        app:showAsAction="never"
        android:title="退出"/>
    
    
</menu>

次に、前回ツールバーが導入された後も、次のコードを追加して、アクティビティを書き込み続けます。

    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        // 显示菜单项左侧的图标
        setOverflowIconVisible(featureId, menu);
        return super.onMenuOpened(featureId, menu);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 从menu_overflow.xml中构建菜单界面布局
        getMenuInflater().inflate(R.menu.menu_overflow, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) { // 点击了工具栏左边的返回箭头
            finish();
        } else if (id == R.id.menu_refresh) { // 点击了刷新图标
            Toast.makeText(this,"刷新了",Toast.LENGTH_SHORT).show();
            return true;
        } else if (id == R.id.menu_about) { // 点击了关于菜单项
            Toast.makeText(this, "这个是工具栏的演示demo", Toast.LENGTH_LONG).show();
            return true;
        } else if (id == R.id.menu_quit) { // 点击了退出菜单项
            finish();
        }
        return super.onOptionsItemSelected(item);
    }

    // 显示OverflowMenu的Icon
    public static void setOverflowIconVisible(int featureId, Menu menu) {
        // ActionBar的featureId是8,Toolbar的featureId是108
        if (featureId % 100 == Window.FEATURE_ACTION_BAR && menu != null) {
            if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
                try {
                    // setOptionalIconsVisible是个隐藏方法,需要通过反射机制调用
                    Method m = menu.getClass().getDeclaredMethod(
                            "setOptionalIconsVisible", Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu, true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

このようにして、オーバーフローメニューを記述し、onOptionsItemSelectedメソッドでクリックイベントに応答することができます。

おすすめ

転載: blog.csdn.net/weixin_38322371/article/details/114119931