Tips

Android 「xmlns:tools」「tools:context」ってなんだろう?【Android TIPS】

xmlns:toolsとtools:contextについて

「activity_main.xml」ファイルの中に「tools:context」という属性があります。

削除してもコンパイルエラーにならないですし、MainActivity.java側で「setContentView()」メソッドを実行しなくてよくなるのかと思いきや、そのような機能があるわけでもなく…

これはいったい何に使われているんだろう?と以前から疑問だったのですが、自分なりに解決したので紹介したいと思います。

 

・res/layout/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

HelloWorldアプリケーションを作成すると、上記のようなファイルが作成され、RelaytiveLayoutの中に「tools:context」属性が作られます。

この「tools」の部分はXMLの名前空間を表し、2行目の「xmlns:tools=”…”」を名前空間を定義している箇所と関連しています。

2行目を削除し、上書き保存すると「tools:context」の部分でコンパイルエラーとなるはずです。

 

WS000372

 

次にこの属性の意味ですが、AndroidManifest.xmlファイルから当該Activityのテーマを読み込み、グラフィカルレイアウトに反映することができます。

HelloWorldアプリケーションでは、アプリケーション全体に「android:Theme.Light」を適用しています。

 

WS000373

 

ためしに、MainActivityに別のテーマを適用してみます。

・res/values/styles.xml

<resources>
    <!-- 省略 -->
    <style name="BlackTheme" parent="android:Theme.Black"></style>
</resources>

「BlackTheme」という新しいテーマを作りました。

 

・AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.helloworld"
    android:versionCode="1"
    android:versionName="1.0" >

    <!-- 省略 -->

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.helloworld.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/BlackTheme" >
            <!-- 省略 -->
        </activity>
    </application>

</manifest>

17行目を新しく追加しました。「MainActivity」に「BlackTheme」を適用しています。

「activity_main.xml」を開きなおしてみましょう。以下のように「android:Theme.Black」が適用され、Android 2.3のような表示になりました。

 

WS000374

 

【参考HP】

http://stackoverflow.com/questions/15368386/what-is-the-meaning-of-xmlnstools-in-android-xml-layout

http://stackoverflow.com/questions/11078487/whats-toolscontext-in-android-layout-files

Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search