ネットには様々な情報があり、一貫性がなく、何が正しいか分からない。 記事[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カードを取り変えてからは、このエラーは経験していない。