Android Layout XML の名前空間はルート要素に定義する
たまに DataBinding を使うのですが、例えば TextView
に tools:text
を指定してレイアウトのプレビューを試みても上手くできないことがあって困っていました。
例えば、適当に
<?xml version="1.0" encoding="utf-8"?> <layout> <TextView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" tools:text="hogehoge" > </TextView> </layout>
と言ったレイアウトを作成しても、プレビューには hogehoge
と表示されません。
仕方がないので今までは android:text="@{text; default=`hogehoge`}"
という記法を使ってデフォルト値を設定するようにしていました。
しかし、今日アプリを作っているとプレビューできているレイアウトがあるのを発見。調べてみると、 layout で tools と android を定義しているとプレビューできる ということが分かりました。
なので、今回はこう置き換えます。
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" tools:text="hogehoge" > </TextView> </layout>
こうすると、しっかり表示されるようになりました。
レイアウトの名前空間はルート要素に定義する
他のレイアウトでも調べた結果、DataBinding とは関係なく ルート要素で tools と android を定義していないとプレビューに失敗する みたいです。
普通はルート要素に定義していたので気づかなかった。これからは <layout>
でもルート要素に名前空間を置こう(自戒)。