2011年9月30日金曜日

Chapter02: RelativeLayoutの特徴

次はRelativeLayoutの説明をします。
RelativeLayoutとは、相対レイアウト用のレイアウトです。子要素を親要素であるRelativeLayoutから相対的に配置することができます。また、子要素同士も、id指定で配置することができます。

では、サンプルを見てみましょう。
サンプルアプリで、メニューを押して、chapter02を選択してください。以下のような画面になります。
 
この画面は、RelativeLayoutの下に、各ポジションを表すTextViewを配置しています。LinearLayoutと違って、自由度が大きいことがわかるかと思います。
赤枠で囲まれているのが、親要素のRelativeLayoutに対して相対的な配置です。
青枠で囲まれているのが、子要素の「中央」というTextViewに対して相対的な配置です。

コードレビュー

では、レイアウトのソースコードを見てみましょう。
Sample01プロジェクトの/res/layout/chapter02.xmlを開いてください。

注目するべきところは、子要素であるTextViewの以下の属性です。
  • 親要素に対する配置(指定値 = true, false)
    • layout_alignParentTop・・・親要素の上部に要素を配置する
    • layout_alignParentBogttom・・・親要素の下部に要素を配置する
    • layout_alignParentLeft・・・親要素の左部に要素を配置する
    • layout_alignParentRight・・・親要素の右部に要素を配置する
    • layout_centerInParent・・・親要素の縦横の中央に要素を配置する
    • layout_centerVertical・・・親要素の縦方向の中央に要素を配置する
    • layout_centerHorizontal・・・親要素の横方向の中央に要素を配置する
  • 子要素同士に対する配置(指定値 = 要素のid)
    • layout_above・・・指定された要素の上に配置する
    • layout_below・・・指定された要素の下に配置する
    • layout_toLeftOf・・・指定された要素の左に配置する
    • layout_toRightOf・・・指定された要素の右に配置する
子要素同士で指定しているidは、中央に配置した要素@id/CenterInParentに対してです。 属性名にalignとかcenterとか出てくるので、Webデザイナーの人でも直観的にわかりやすいかなと思います。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <!-- 
        RelativeLayoutは相対レイアウトです。
        RelativeLayoutの下のウィジェット類は、親のRelativeLayoutに対して相対的に配置されます。
        ■がそれです。
        ■   ■
        
          ■
          
        ■   ■
      -->
    <!-- 親要素に対して左上に配置 -->
    <TextView
        android:id="@+id/LeftTop"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_left_top" />
    <!-- 親要素に対して左下に配置 -->
    <TextView
        android:id="@+id/LeftBottom"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_left_bottom" />
    <!-- 親要素に対して右上に配置 -->
    <TextView
        android:id="@+id/RightTop"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_right_top" />
    <!-- 親要素に対して右下に配置 -->
    <TextView
        android:id="@+id/RightBottom"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_right_bottom" />
    <!-- 親要素に対して中央に配置 -->
    <TextView
        android:id="@+id/CenterInParent"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_center_in_parent" />
    <!-- ここから、中央の要素に対して相対配置します。□がそれです。
         ■   ■
           □
          □■□
           □
         ■   ■
     -->
    <!-- 上
        layout_aboveで指定されたIDの要素の上に配置されます。
        横方向で中央揃えするために、layout_centerHorizontalをtrueにしてます。
     -->
    <TextView
        android:id="@+id/above"
        android:layout_above="@id/CenterInParent"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_above" />
    <!-- 下
        layout_belowで指定されたIDの要素の下に配置されます。
        横方向で中央揃えするために、layout_centerHorizontalをtrueにしてます。
     -->
    <TextView
        android:id="@+id/below"
        android:layout_below="@id/CenterInParent"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_below" />
    <!-- 左
        layout_toLeftOfで指定されたIDの要素の左に配置されます。
        縦方向で中央揃えするために、layout_centerVerticalをtrueにしてます。
    -->
    <TextView
        android:id="@+id/toLeftOf"
        android:layout_toLeftOf="@id/CenterInParent"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_to_left_of" />
    <!-- 右
        layout_toRightOfで指定されたIDの要素の右に配置されます。
        縦方向で中央揃えするために、layout_centerVerticalをtrueにしてます。
    -->
    <TextView
        android:id="@+id/toRightOf"
        android:layout_toRightOf="@id/CenterInParent"
        android:layout_centerVertical="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter02_to_right_of" />
</RelativeLayout>
RelativeLayoutが便利なところは、中央に要素を置くのが簡単なところです。画像を中央に配置するなど、layout_centerInParentを指定するだけでよいので、画像を使った表示の場合などによく使ってます。
LinearLayoutに比べると、思った通りに要素の配置が行いやすいはずです。そのかわり、XMLでの要素指定が複雑化する場合があるので、把握するのが大変になったりします。

全てをRelativeLayoutで配置するのではなく、LinearLayoutとRelativeLayoutを上手に使って配置するのがよいでしょう。

2011年9月29日木曜日

Android端末で開発中のアプリを試すための設定

レイアウトの記事を書いている途中でまた気づいたので、また別の話題になりますが、Android端末で開発中のアプリを試すための設定方法です。

まず、ホーム画面でメニューボタンを押し、設定を押します。

 次に、設定のリスト内から、アプリケーションを選択します。
 提供元不明のアプリのインストールを許可するにチェックを入れます。これは、普段はチェックを外しておいたほうが安全です。野良アプリ(Android Marketに登録されていないアプリ)とかインストールする場合はチェックが必要です。

続いて、開発を選択します。
すべてにチェックを入れます。疑似ロケーションを許可は、GPSアプリとかを作る場合のみほしい機能なので、特に入れなくてもいいですが、とりあえず。疑似ロケーションとは、東京にいながらにして京都にいるかのごとくGPSデータをいじったりすることです。
これで、Eclipseから実機に開発中のアプリをインストールする準備ができました。

なお、開発中以外は全部外しておくことをお勧めします。変なアプリをインストールされても私は知りません!

Chapter01:LinearLayoutの特徴

では、ようやくレイアウトXMLの説明に入ります。
今回は、サンプルアプリのChapter01でLinearLayoutの説明をします。

まだプロジェクトをインポートしていない場合は、こちらの記事を先に読んでください。

先に説明しておきますが、Androidのレイアウト要素には、以下の種類があります。

  • LinearLayout(リニアレイアウト)
  • RelativeLayout(リレーティブレイアウト)
  • FrameLayout(フレームレイアウト)
  • TableLayout(テーブルレイアウト)
  • AbsoluteLayout(現在は非推奨)

5種類ありますが、ほとんどの場合、上の3種類のみを使います。特に、LinearLayoutとRelativeLayoutを多用するので、この講座(基本編)では、この2つに絞って説明します。

そもそもLayoutって何?

Layoutは、HTML的に平たくいうと、divタグみたいなものです。入れ物です。TableLayoutはtableタグみたいなものですが。しかし、名前が違うのでそれぞれ特徴があります。しかしここでは言及しません。

LinearLayoutって何?

LinearLayoutは、もっとも素直なレイアウトで、左上詰めで子要素を配置するレイアウトです。一番多用するレイアウトです。子要素を配置する方向(縦か横か)を決めることができます。
Chapter01の画面は以下のようになっています。
この画面はLinearLayoutというレイアウトとTextViewというウィジェットで構成されています。パッと見では、全部縦方向に配置されているようにみえるかもしれませんので、視覚的に表してみます。青い枠のLinearLayoutの中に、赤い枠のLinearLayoutが入っています。赤い枠のほうは、横方向にレイアウトを配置しています。

コードレビュー

では、レイアウトのソースコードを見てみましょう。
Sample01プロジェクトの、/res/layout/chapter01.xml を開いて下さい。

注目するべきところは、LinearLayoutという要素の、android:orientationという属性です。それ以外は単にテキストを表示しているだけなので、まぁそんなものだと思っておいてください。

ちなみに、layout_widthとlayout_heightは要素の横幅、縦幅を表します。fill_parentだと親要素分全部使います。つまり、width: 100%;です。wrap_contentは、必要な分だけ使うという指定です。数値でも指定可能ですが、ひとまずはこの2つを押さえましょう。また、match_parentというのもあります。2.2以降では、fill_parentではなく、match_parentを使いますが、Xperiaがある限りは、fill_parentを使わざるをえません…。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <!-- ここから垂直方向 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter01_linearlayout_vertical" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter01_test_1" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter01_test_2" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter01_test_3" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter01_linearlayout_horizontal" />
    <!-- ここから水平方向 -->
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/chapter01_test_4" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/chapter01_test_5" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/chapter01_test_6" />
    </LinearLayout>
    <!-- ここまで水平方向 -->
    <!-- また垂直方向 -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter01_test_7" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter01_test_8" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/chapter01_test_9" />
</LinearLayout>
orientation属性は、子要素の配置方向を決定します。

  • vertical・・・縦方向
  • horizontal・・・横方向

途中に存在するLinearLayoutも、親要素のLinearLayoutの子要素なので、あくまで縦方向に配置される要素として置いてあります。しかし、その中身は横方向に配置されています。

単純な例でLinearLayoutを紹介しましたが、複雑なレイアウトも、ほとんどはLinearLayoutを入れ子にしたレイアウトです。縦方向の途中の要素で横方向のレイアウトが必要になったら、LinearLayoutを追加して、orientationをhorizontalに設定して配置。それを抜けたらまた縦方向。もし横方向内で縦のレイアウトが使いたい場合は、さらにLinearLayoutを入れ子にして…という感じです。

divタグの中にdivタグを入れて、さらにdivタグを入れて…というのに似ています。

LinearLayoutの特徴が分かっていただけましたでしょうか?
次回は、RelativeLayoutの特徴を説明します。

2011年9月28日水曜日

スクリーンショットを撮る方法(DDMS)

ふと記事を書いている途中で思って、これこそが重要じゃないかと気づきました。スクリーンショットですね。せっかくデザインしても、実際に端末見せたり、PCでエミュレータ起動して、「こんな感じで」とかするのはあまりにも無謀です。できるけど面倒臭いし、プレゼンとかに載せられない。

ということで、スクリーンショットを撮る方法を書きます。

スクリーンショットを撮るのは簡単です。DDMSです。
DDMSって何ぞ?という人は、この記事をまず読んでください

では、DDMSのパースペクティブを開きます。
左上のデバイスの部分にカメラみたいなマークがありますね。これを押します。

 押したら、スクリーンショットのウィンドウが出てきます。
上にメニューがあります。
  • リフレッシュ・・・スクリーンショットを現在の画面で撮りなおす
  • Rotate・・・スクリーンショットを回転させる
  • 保管・・・保存する
  • コピー・・・クリップボードにコピーする
  • 終了・・・ウィンドウを閉じる

デザインが終わったら、これでスクリーンショットを撮って、スライドに載せたり、Android Marketにアップしたりしましょう。

サンプルアプリの使い方について

さて、ようやくレイアウトの話になっていきます。まだサンプルプロジェクトをEclipseに用意してない人は、サンプルプロジェクトをElipseにインポートしておいてください。以下のURLで説明しています。

Eclipseでプロジェクトをインポートする(zipのまま)

インポートできているものとして話を進めます。

サンプルアプリは、特に処理の実装はしておらず、あくまでもレイアウトをXMLでやるだけにしています。しかしたくさんのプロジェクトを作って説明するのはインポートする手間も増えて大変なので、ある程度の量を1つのプロジェクトにまとめています(今後はプロジェクト増える予定ですが)。

では起動してみましょう。プロジェクト上で右クリックして、実行 > Androidアプリケーションを選択します。

 今回はエミュレータを起動させました。メニューを押してみましょう。
chapter01~chapter06まで、レイアウトのサンプルが入っているので、このブログでそれぞれ説明していきます。
次回は、chapter01について説明します。

Eclipseでプロジェクトをインポートする(zipのまま)

AndroidのレイアウトのXMLの講義を行うに当たって、サンプルプロジェクトを作成しています。それを元に、記事を書いていきたいなぁと思っているのですが、今回はそのサンプルプロジェクトをEclipseのワークスペースにインポートする方法をご紹介します。

サンプルは、githubにアップしています。
https://github.com/patorash/AndroidLayoutXmlStudy-Sample01

gitを使ってプロジェクトを読み込むこともできますが、今回はzip形式で読み込む方法です。まず、ダウンロードボタンを押します。
すると、ポップアップが出てくるので、Download .zip のほうを選択します。すると、zipでダウンロードされます。インポートはzipのままでもできますから、解凍しないでください。

ダウンロードしたプロジェクトを、Eclipseにインポートします。ファイルより、インポートを選択します。

既存プロジェクトをワークスペースへを選択し、次へを押します。
 さきほどダウンロードしたzipファイルを指定します。アーカイブ・ファイルの選択を選び、参照を押して、zipを選びます。すると、解析されて、プロジェクトが出てきます。出てきたのを確認したら、完了ボタンを押しましょう。
 なんかビックリマークがでてます。これは、プロジェクトの状態がおかしいぞ!というマークです(自分もよくわかってないですが)。直しましょう。
 プロジェクトより、クリーンを選択します。プロジェクトを一度綺麗にしてビルドしなおすという作業をしてくれます。プロジェクト単位で指定もできますし、全プロジェクトをすることもできます。お好きなほうを選びましょう。
 クリーンが終わると、ビックリマークが消えました。これでOKです。

以上で、サンプルプロジェクトのインポートが終わりました。
ようやく次回より、レイアウトXMLの説明ができそうです。

2011年9月27日火曜日

Eclipseでデバッグするための方法の基礎(DDMS)

さて、WebデザイナーのためのレイアウトXML講座と言っているのに、未だにレイアウトXMLの話に入らなくてごめんなさい。もう心折れかけているかもしれませんが、もうしばらく辛抱してください。これを説明してからじゃないと、完全に心が折られると思ったのです。すみません。

Androidを使っている人だったら見たことがあるかもしれませんが、アプリはエラーで強制終了することがあります。こんな画面です。


レイアウトを書いて、いざ確認しようと思ったら、いつか遭遇してしまう画面です。悲しいですね。一体なにがいけないの?プログラムがわからないとやっぱりダメなの?と、困惑することでしょう。画面を見ていても、エラーの原因はわかりません。デバッグ画面を見なければ。

ということで、Eclipseのデバッグ画面を見る方法です。
Androidの場合、Javaのデバッグ画面とは別にDDMSというものがあります。DDMSとはDalvik Debug Monitor Serviceの略です。AndroidはJavaのVMではなく、Dalvik VMというものの上で動いているので、それをデバッグ用にモニタするものです。

では、早速表示させてみましょう。 Eclipseの右上のほうには、パースペクティブというものがあります。今、Eclipseで扱っている機能を表してる感じです。Androidのコーディングをする場合はJavaのパースペクティブを表示しています。赤枠のところを押して、新しくパースペクティブを開きましょう。
すると、候補が色々出てきます。DDMSを選択します。なかったら、その他を押して、そこからDDMSを選択します。
すると、Javaのパースペクティブのボタンの横にDDMSというものができて、パースペクティブが切り替わり、DDMS用の画面が出てきます。以下のような感じです。
エミュレータや端末をデバッグモードでつないでいたら、左上のほうに以下のような感じで表示されているはずです。表示される情報は1端末ごとなので、繋がっている端末を選択しましょう(エミュレータでもOK)。
DDMSは多機能で私も全部使いこなしているわけではないですし、デザイナーの方にもDDMSの詳しい情報は今のところ必要ないと思うので、エラーの原因を調べるヒントを見る方法を説明します。それは、ログです。

アプリが強制終了したら、DDMSにログが出力されます(設定次第では出力されませんが、普通は開発中は出力されます)。 Devicesでデバッグ用の端末を選択したあと、下のほうにあるLogCatを見ます。いろんなログが出ていると思いますが、エラーの原因を見る方法は簡単です。

ログの表示レベルをEにします。右側にあるログレベルを表すアルファベットをクリックすると、そのログレベル以上のログしか表示されなくなります。
エラーでアプリが落ちるときは、Eレベルのログになります。直近のエラーなので、一番下のログを見れば、だいたいわかるというわけです。見たことがあるログだったら、エラーの原因がわかりますし、わからない場合はそのエラーの原因でググれば、大体の情報はネット上にあります。

今回は、AndroidManifest.xmlに指定されたActivityを定義し忘れていたので、ActivityNotFoundExceptionという例外が出ているというメッセージでした(もちろんわざとですよ!)。 このAndroidManifestにActivityの定義をし忘れるというのは、慣れてても時々やってしまうので、覚えておくといいと思います。本のサンプルを作っていると、定義をはしょられてて、DDMSを見て気づくことが結構あります。

2011年9月26日月曜日

Eclipse Android用Javaフォーマッタのインポートを行う

 GoogleはAndroidのソースに関して、コーディングルールを設けています。
 Eclipseだと、ctrl + shift + F(Macだとcommand + shift + F)で、Javaのコードをフォーマットしてくれるのですが、デフォルトのままだとAndroid用のフォーマットではありません。 EclipseにAndroid用のフォーマットを記憶させるために、以下の作業をしましょう。

 まず、以下のXMLをファイルとして保存します。
(本来は、Androidのソースコードが公開されているhttp://android.git.kernel.orgに置いてあるのですが、2011/09/26現在、不正な攻撃を受けたためにアクセスできないようになっていますので、こちらでコピーを公開しています。その点をご容赦ください)

<?xml version="1.0" encoding="UTF-8"?>
<profiles version="10">
<profile name="Android" version="10">
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
</profile>
</profiles>

次に、保存したxmlファイルをEclipseに読み込ませます。
設定画面を開いて(Winならばウィンドウ > 設定。Macならば、Eclipse > 環境設定)
Java > コード・スタイル > フォーマッター を開き、インポートを選択し、上記のxmlのファイルを読み込ませます。

そして、アクティブなプロファイルの箇所で、Androidを選択し、適用ボタンを押します。
これで、Eclipseのソースフォーマット機能を使ったときに、Androidのコーディングルールでフォーマットしてくれます。(変数名などは別です。あくまでフォーマットだけです)
以上です。

レイアウトXMLを形成するXML群の概要説明

Androidのレイアウトを形成するのは、XMLがほとんどです。しかし、色んな種類があります。ここではレイアウトに関連するファイルに絞って、たくさんあるXMLの種類を説明します。まだ、レイアウト自体はしません。

先に言っておきますが、AndroidのXMLは、Web系のエンジニアを意識しているのかと思いますが、レイアウトとデザインの分離がしやすいようになっています。まさにHTMLとCSSの関係とそっくりです。HTMLとCSSの関係っぽく説明したいと思います。
レイアウトのXML = HTML
レイアウトのXMLは、ウェブサイトでいうHTMLの役割です。極論を言えばですが、CSSがなくてもウェブサイトは作れますね。それと同じくAndroidでもスタイルやテーマを使わなくてもアプリのレイアウトは作れます。しかし、似たようなパーツがたくさんできると修正が大変だったり、ミスも発生しやすくなります。そして、パーツやデザインを使い回したいのが世の常ですね。そこで、スタイルを使います。
スタイルのXML = CSS(細かいパーツ用)
スタイルは、レイアウトXML内の要素で使っている属性をまとめる事ができます。書き方はXMLですが、効果としてはCSSと似たようなものです。同じようなボタンの配置がある場合などは、まとめておくと修正も楽ですし、コード量が減ります。
テーマのXML = CSS(大枠)
ウェブサイトと多少違うところは、テーマという機能があるということですが、これもWordPressなどを使っていたらわかるかと思います。テーマを使う事で、サイトのパーツに統一性を持たせるように、アプリも統一性を持たせることができます。
例えば、ボタンの色をグラデーションかけたい、このアプリ内では全てそうしたいと思った場合に、全部のボタンにスタイルを適用するのは面倒ですし、適用忘れなどのミスも発生しかねません。そういう場合に、テーマを使います。
このアプリ内でこのパーツは全てこのデザインが適用されるという担保になりますので、積極的に使っていきたいところです。
こんなふうに書いてはいますが、私がレイアウトを作成する場合は

  1. とりあえずレイアウトのXMLをガリガリ書きながら見た目を逐一確認
  2. 見た目が完成したら、まとめられそうなものをスタイルにまとめる
  3. テーマにしたほうがよさそうなパーツはテーマへ
という感じでやっています。
まぁそこは人それぞれかと思います。

2011年9月24日土曜日

Androidプロジェクトを作り方とエミュレータ起動

Android開発環境構築はもう終わっていますでしょうか?まだの人は環境構築を先に行ってください。終わりましたか?終わってますよね?はい、終わった!!

つーことで、次はAndroidプロジェクトの作り方と、エミュレータへのインストールの方法を書きます。それができないと、何のために環境構築したのかって話ですよ。

では、いきましょう。
一番左上のプロジェクト作成ボタンを押して、Androidプロジェクトを選択します。


Androidプロジェクト作成ダイアログが表示されます。

  1. プロジェクト名を入れます。ここではとりあえずSampleというプロジェクト名にしました。
  2. ワークスペース内に新規プロジェクト作成を選択します。
  3. ビルド・ターゲットを選択します。ここでは、2.1-update1を選択しました。


続きです。パッケージ名を入力します。
パッケージ名というのは、Javaのソースを置くフォルダの構造みたいなものです。1アプリにつき、1パッケージでユニークな存在でなければなりません。まったく違うアプリでも、既に同じパッケージ名のアプリがインストールされていたら、インストールできません。
命名ルールとしては、ドメインの逆みたいな感じです。

私の場合は、
com.okolabo.android.[アプリ名]
などにしています。

ドメイン持ってる人はドメイン使いましょう。絶対に他人のドメインは使わないように!
次へボタンがありますが、次はテストプロジェクト作成なので、無視して終了を押してください。


すると、Sampleというプロジェクトができました。中身はこんな感じです。
重要なのだけ説明すると、


  • srcフォルダ・・・パッケージ名のフォルダがある。ソースを入れるところ。
  • genフォルダ・・・Eclipseが自動生成するフォルダ。絶対にいじらないこと。
  • assetsフォルダ・・・アプリで使うファイルを置くフォルダ。htmlとかを置いたりする。
  • res・・・リソースフォルダ。レイアウトのxmlファイルなどはここにある。
  • AndroidManifest.xml・・・アプリの設定ファイル。編集し忘れに注意。



では、早速作ったプロジェクトのアプリをエミュレータにインストールしてみましょう。実は、Androidプロジェクトは作られた時点でHello, world的なアプリが既にできています(Activityを作った場合)。
プロジェクトの上で右クリックして、実行を選択し、Androidアプリケーションを選びます。


すると、事前に作成しておいたエミュレータが起動します。エミュレータがない場合は作ってください。環境構築のところに書いています。


エミュレータが起動し終わったら、鍵マークをドラッグして右に引っ張ってロック解除します。

 Hello World, SampleActivity!と表示されているはずです。

こうやって、エミュレータにアプリをインストールして動作を見ながら確認していきます。ちなみに実機がつながっていたら、実機で確認できます。エミュレータは起動に時間がかかるので、実機を持っている場合は実機のほうが便利です。

あと、エミュレータを閉じてしまうと、また起動に時間がかかるので、そのままにしておきましょう。次に実行を行ったら、そのまま起動しているエミュレータにアプリがインストールされるので、手間が省けます。

ただ、エミュレータとEclipseを起動していると、かなりメモリを食うので、開発端末が重たくなります。実機を持っている場合は、実機でやったほうがいいので、次回は実機に開発中のアプリをインストールする方法を解説します。


2011年9月23日金曜日

Androidエミュレータを日本語化する方法

エミュレータを作ったはいいけど、英語じゃないかこれー!?どうすればいいの!?という人のために、書いておきます。
ホーム画面より、メニューボタンを押して、Settingsを選択します。
 すると、設定メニューが出てくるので、Language & keyboardを選びます。
 Select localeを選びます。
 一番下に、日本語がありますから、それを選択します。
 日本語になりましたー!!
以上!!

Android開発環境構築(MacOS X Lion 64bit)その3

さて、Androidのエミュレータの作り方を説明します。
まず、AVD Managerを起動させます。Virtual devicesを選択します。私の環境なのでたくさんエミュレータが作ってありますが、最初は何もないはずです。新規ボタンを押しましょう。


では、Xperiaというエミュレータを作ってみましょう。
理由は、Xperiaまでサポートすることが多いからです。画面サイズはSkinのところでいろいろと設定できますから、後でいろんなパターンのエミュレータを作ってみてください。

名前:Xperia
ターゲット:Google APIs API Level 7
SD Card:512MB
Skin:WVGA854

また、ターゲットでGoogle APIsではないものがありますが、それはGoogle Mapsが使えないタイプになります。Google Mapsアプリを作る機会もあるでしょうから、Google APIsで作ったほうがいいんじゃないかなと思います。

また、ハードウェアのところをいじれば色々と設定できますが、今回はそのままで。


Xperiaが追加されました。


Xperiaを選択して、開始ボタンを押したら、エミュレータが起動します。

起動が終わるとこんな感じの画面になります。適当にいじってみましょう。

次回は、これだけはやっておきたいEclipseの設定です。

Android開発環境構築(MacOS X Lion 64bit)その2

次に、Android SDKのインストールを行います。


Mac用のSDKをダウンロードします。ダウンロードし終わったSDKは解凍して、アプリケーションフォルダの中にでも配置しておきましょう。

さて、次は、EclipseにADT(Android Developer Tool) Pluginをインストールします。Eclipseのヘルプより、新規ソフトウェアのインストールを選択します。


作業対象のところの追加ボタンを押します。

名前:ADT
ロケーション:https://dl-ssl.google.com/android/eclipse/

と入力してOKを押します。


しばらくすると、開発ツールというのが表示されるので、チェックボックスにチェックを入れて、次へを押していき、インストールを行います。時間がかかりますので、コーヒーでも飲みましょう。セキュリティ警告が出てきますが、OKを押してインストールします。また、eclipseの再起動を求められますので、再起動しましょう。


再起動が完了したら、ADTにAndroid SDKがどこにインストールされているのか教えてあげましょう。メニューのEclipseより、環境設定を選択します。


左ペインより、Androidを選択し、右ペインのSDK ロケーションを設定します。私の環境だと既に設定されているのでリストが表示されていますが、普通はまだ真っ白なはずです。設定が終わったらOKを押します。


次に、Eclipse経由でAndroid SDK and AVD Managerを起動します。ドロイドくんが箱に入ってるようなマークのボタンを押します。ちなみにAVDとはAndroid Virtual Deviceのことで、つまりはエミュレーターです。


左ペインから、Available Packagesを選択します。初回なので、すべてにチェックを入れて、ダウンロードします。3rd Partyのやつは、まぁなくてもいいですが、ついでなので入れてしまいましょう。
ちなみにこのインストールは量がすごく多いので、かなりの時間がかかります。ぼーっと待っていても時間がもったいないので、お風呂に入るなり、ごはんを食べるなり、洗濯するなり、買い出しにいくなりしましょう。


インストールが終わったら、今回はとりあえず終了です。
次回は、ADV(Android Virtual Device)の作り方です。