トップAndroid Java > ツールバーのメニューの作り方

ツールバーのメニューの作り方

メニューを作る

ネットには様々な情報があり、一貫性がなく、何が正しいか分からない。 記事[5]が比較的新しく詳しい。しかし、Android Javaは手がかかる。 OSMアプリのメニューはツールバーを使わず、デフォルトで一番楽に使えるものの方がいいだろう。

OSMの場合、そもそもメニューは使わずボタン操作の方がいい。

AndroidManifest.xml

現在、ツールバー・メニューが正常に動作している GISアプリでは次のようにしている。関係のありそうな行のみ抜粋した。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.gis">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.GIS"
        android:usesCleartextTraffic="true">

    </application>

</manifest>

エラーが出る OSMアプリに xmlns:tools="http://schemas.android.com/tools" を追加したが、Name space declaration is never used となる。

activity_main.xmlに toolbar を設置する

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/my_toolbar"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:paddingBottom="1dp"
        android:elevation="1dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        tools:ignore="MissingConstraints" />

res/menu に my_toolbar.xml をおく

<?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">

    <item android:id="@+id/utility"
        android:icon="@drawable/ic_baseline_home_repair_service_24"
        android:title="utility"
        app:showAsAction="always">
        <menu>
            <item android:id="@+id/placenames_arbitration"
                android:title="地名描画の調停"
                />
        </menu>
    </item>
</menu>

メニューにチェックボックスをつける

<?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">

    <item android:id="@+id/toolbar_menu_settings"
        android:icon="@drawable/ic_baseline_settings_24"
        android:title="settings"
        app:showAsAction="always">
        <menu>
            <item android:id="@+id/blank_map"
                android:title="白地図"
                android:checkable="true"
                android:checked="false"
                />
        </menu>
    </item>
</menu>

メニューにラジオボタンをつける

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/src_japan"
            android:title="日本"
            app:showAsAction="never" />
        <item
            android:id="@+id/src_kanto"
            android:title="関東"
            android:checked="true"
            app:showAsAction="never" />
        <item
            android:id="@+id/src_local"
            android:title="ローカル"
            app:showAsAction="never" />
    </group>
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.my_toolbar, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.src_japan:
                item.setChecked(!item.isChecked());
                Renderer.src = "japan";
                return true;

            case R.id.src_kanto:
                item.setChecked(!item.isChecked());
                Renderer.src = "kanto";
                return true;

            case R.id.src_local:
                item.setChecked(!item.isChecked());
                Renderer.src = "local";
                return true;

            case R.id.blank_map:
                item.setChecked(!item.isChecked());
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

メニューやボタンが反応しなくなることがある

自作地図アプリでは時々、メニューやボタンが反応しなくなることがある。 そんなときでもスクロールやピンチインアウトは効くこともあれば、全て効かなくなることもある。


この原因は SDカードの不調にあったようだ。SDカードを取り変えてからは、このエラーは経験していない。

リファレンス

[1] ActionBarのメニューにCheckBoxを表示する
[2] [Android]Toolbarにオプションメニューを表示させる
[3] Androidアプリ開発 Toolbar 上部のアイコン式のメニュー おまけでKotlin有り
[4] ツール属性のリファレンス
[5] Tool Bar(Action Bar)の実装[2020.7.27/2021.8.10]
[6] Activityのライフサイクルについて