今後忘れた頃にまた踏みそうだなと思ったので、備忘録として。
前提
<?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/some_id" android:title="@string/some_menu_item_title" android:actionLayout="@layout/some_action_layout" app:showAsAction="always" /> </menu>
このようなコードがあったとき、なぜかtitleで指定している文字が表示され、actionLayoutで指定しているレイアウトが表示されなった。
解決策
android:actionLayout="@layout/some_action_layout"
↑これを
↓こうする
app:actionLayout="@layout/some_action_layout"
以下に書いてあります: stackoverflow.com
android:とapp:の違い?
android:
はAndroid SDKが提供するUIのattributeの値指定に利用できるもので、app:
は基本的にはカスタムViewに対してattributeを用いて値を変更したいときなどに利用できるものらしそう、というところまではわかる。が、カスタムネームスペースというのは開発者がカスタムViewなどを定義したときのみに利用できてほしいところが、実際のところ、今回のようなmenu xmlのactionLayoutの指定といった、Androidプラットフォームが提供しているAPIに対しても使うことがある。他にも、app:srcCompat
など。
AndroidプラットフォームのAPIを利用する際、いつandroid:
を使い、いつapp:
を使うのか。対応がまとまっていると嬉しいなと思ったが、そのようなリソースは見つけれていない。
もし知っている方がいたら教えていただけると嬉しいです🙏