Unyablog.

のにれんのブログ

Android Layout XML の名前空間はルート要素に定義する

たまに DataBinding を使うのですが、例えば TextViewtools: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 と表示されません。

f:id:nonylene:20160815235046p:plain

仕方がないので今までは 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>

こうすると、しっかり表示されるようになりました。

f:id:nonylene:20160815235606p:plain

レイアウトの名前空間はルート要素に定義する

他のレイアウトでも調べた結果、DataBinding とは関係なく ルート要素で tools と android を定義していないとプレビューに失敗する みたいです。

普通はルート要素に定義していたので気づかなかった。これからは <layout> でもルート要素に名前空間を置こう(自戒)。