ネットには様々な情報があり、一貫性がなく、何が正しいか分からない。 記事[5]が比較的新しく詳しい。しかし、Android Javaは手がかかる。 OSMアプリのメニューはツールバーを使わず、デフォルトで一番楽に使えるものの方がいいだろう。
OSMの場合、そもそもメニューは使わずボタン操作の方がいい。
現在、ツールバー・メニューが正常に動作している 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 となる。
<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" />
<?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カードを取り変えてからは、このエラーは経験していない。