
今後忘れた頃にまた踏みそうだなと思ったので、備忘録として。
前提#
<?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:を使うのか。対応がまとまっていると嬉しいなと思ったが、そのようなリソースは見つけれていない。
もし知っている方がいたら教えていただけると嬉しいです🙏