CHAPTER 3
第 3 章
第 3 章 プログラミング
プログラミングの最初は Eclipse の使い方を覚えることです。 Android アプリケーション開発のプラットフォームである Eclipse は非常に高機能であり、プログラミングのかなり の部分をアシストしてくれる機能が備わっています。Eclipse のワークスペース
Eclipse のワークスペースは「パースペクティブ」と呼ばれ、それぞれのウィンドウはビューと呼びます。Android で利用する「パースペクティブ」は基本的には 3 種類です。java
最初のデフォルト プログラミング・画面設計等の作業画面です。 Eclipse のバージョンによってデフォルトの配置は多少異なる場合がありますが、基本は同じです。 それぞれのビューは縮小・拡大・変形が可能なので、自由にレイアウトできます。デバッグ
実行中の変数の中身を確認したり、ステップ実行する画面です。 Eclipse メニューの「ウィンドウ」-> 「パースペクティブを開く」-> 「デバッグ」または画面右上のアイコンをクリッ ク「パースペクティブを開く」ダイアログ表示させ「デバッグ」を選択。 それぞれのビューは縮小・拡大・変形が可能なので、自由にレイアウトできます。 初期状態の戻すには「パースペクティブのリセット(R)」を実行します。それぞれのビューは縮小・拡大・変形が可能なので、自由にレイアウトできます。 初期状態の戻すには「パースペクティブのリセット(R)」を実行します。 ※この DDMS のファイル・エクスプローラーで操作可能なデバイスは AVD のみになります。 実機ではパーミッションの関係で内部の操作はできません。(外部ストレージ等一部操作可能な部分 はあります) 一度パースペクティブを利用すると、画面右上に表示され、ワンクリックで切替が可能になります。
DDMS
デバイスの状態を確認、操作画面です。 Eclipse メニューの「ウィンドウ」-> 「パースペクティブを開く」-> 「その他」-> 「DDMS」または画面右上のアイコ ンをクリック 「パースペクティブを開く」ダイアログ表示させ「DDMS」を選択。ソースファイルの編集
プロジェクトの「src」フォルダ内にある「MainActivity.java」をダブルクリックします。 各ウィンドウを最小化した状態 ウィンドウを復元するには左右それぞれのアイコンをクリックします。 必要な時に必要なウィンドウだけ表示させることができるので非常に便利です。 ※表示フォントやカラーの指定は Eclipse メニューの「ウィンドウ」-> 「設定」-> 「Java」-> 「エディター」で 設定できます。Java のコメント文
一行コメントは、行頭または該当箇所に「 // 」を入力することでそれ以降の記述がコメント扱いされます。 複数行にわたってコメントする場合は、開始に「/*」終了に「*/」で囲みます。Eclipse のエディター機能
Eclipse のエディターは非常に高機能で多くの言語でのアプリケーション開発をサポートしています。 まずは便利な機能を習得しましょう。ソースコードの折りたたみ機能
ソースが折りたたまれている状態 行番号の隣にはいろいろな表示が出ます。 有効に使うとプログラミングが効率よく行えます。 折りたたまれている「+」部分をクリックするとソースコードが展開されます。コンテンツ・アシスト機能の有効利用
Eclipse には強力なコンテンツ・アシスト機能が搭載されています。 このアシスト機能を活用するとプログラミングが飛躍的に効率よく行えるようになります。入力時のエラー表示
行末のセミコロンを削除して行番号の隣の「×」をクリックすると、コードエラーに対するヒントが表示されます。 ファイルが修正され、未保存の状態では上部パネルのファイル名の前に「*」が表示されます。 このように様々なメッセージが表示されたり、コード入力サポート機能があります。コード入力サポート機能
「setContentView(R.layout.activity_main);」の行を削除します。 「set」と入力して Ctrl + Space キーを押します。 続いて入力すべき項目のリストが表示されます。「setContentView(int layoutResID): void – Activity」を選択して入力を補完します。 この Ctrl + Space キー はいつでも利用できます。
補完したい入力の文字の後ろにカーソルを合わせ Ctrl + Space キーを押すと補完リストがある場合にはそのリスト が表示されます。また、プログラミングの記述、変数、定数など、1 文字、2 文字入力して Ctrl + Space キーを押して みてください、そのアシスト機能がどれほど便利か実感できるはずです。プログラミングのポイントはこのアシスト 機能をいかに有効に使えるかがポイントとなります。
先ほど補完入力した項目はまだ完全ではないので、赤いアンダーラインが表示されています。 マウスをポイントするとそのエラーの解決ヒントが表示されます。
表示されたリストから 「layout」を選択します。
続けてドット「.」を入力すると次のリストが表示されます。
「activity_main : int – R.layout」を選択します。 一行の終わりに「; 」を入力します。
これで元通りのコードになりました。 このコンテンツ・アシスト機能を使っていくとインポートが必要なライブラリは自動で追加されていくので、非常 に便利です。 このほか、Eclopse には非常に多彩なサポート機能が実装されています。 実際にプログラミングを行いながら習得してください。 ※アシスト機能を使ってクラス名やメソッド名を入力すると必要なライブラリを自動的にインポートしてくれ る機能が備わっています。この機能を利用すると import の部分をほとんど手入力することはありません。また、 ファイルを保存する時も自動でインポートや削除する機能が備わりました。
MainActivity クラスの自動生成コード
package com.example.helloworld; パッケージ名 import android.os.Bundle; インポートされるライブラリのパッケージ名 import android.app.Activity; インポートされるライブラリのパッケージ名public class MainActivity extends Activity { }
このアプリケーションの基本となるクラスの宣言 @Override
アノテーション
public void onCreate(Bundle savedInstanceState) { } クラスのメソッド super.onCreate(savedInstanceState); 親クラスのメソッド処理 setContentView(R.layout.activity_main); 表示するビューの設定 @Override アノテーション
public boolean onCreateOptionsMenu(Menu menu) { } メニューキーに対応するメニュー生成メソッド getMenuInflater().inflate(R.menu.activity_main, menu); メニューに表示する xml データの設定 return true; メニュー表示後の動作を決定するフラグの設定 (Java では各ステートメントの終わりをセミコロン「;」で区切って記述します。)
ソースコード解説
public class MainActivity extends Activity
パブリック設定で「Activity」クラスを継承する「MainActivity」という名のクラスを宣言しています。 public void onCreate(Bundle savedInstanceState)
パブリック設定で戻り値のない「onCreate」というメソッド設定しています。 この「onCreate」メソッドは Android アプリケーションが最初に呼び出すメソッドです。 「savedInstanceState」は呼び出し時に渡されるデータの名前のようなもので、自由に設定してかまいません。 super.onCreate(savedInstanceState) 「onCreate」メソッドは親クラスの「onCreate」メソッドの処理を行う必要があり「super.onCreate (引数)」とい う呼び出しを記述します。 setContentView(R.layout. activity_main) コンテントビュー(画面) にリソースの「activity_main.xml」を表示する命令です。 「R.」と記述することによりリソース内のファイルやオブジェクトを参照できます。 このプログラムは単純にリソース内の「activity_main.xml」を表示しているプログラムです。 ※オブジェクトとは 画面に表示するイメージやボタン、テキストなどのパーツのことをオブジェクトと呼んでいます。
クラスの基本構造
package
パッケージ名を記述します。 ここではプロジェクト作成時に設定した com.example.helloworld が記述されています。import
外部のファイルのクラスを呼び出して使えるようにインポートするための記述です。ここでは android.os.Bundle、 android.app.Activity 、android.view.Menu ライブラリが使われているため呼び出され ています。
クラス定義
Java はプログラムの最小単位をクラスと呼んでいます。クラスの指定は「class」 のあとに続いているのがクラス名 です。 アクセス修飾子 class クラス名 extend 継承元クラス名 { クラスの中身 } という記述が基本構造です。 Android は「Activity」クラスがベースとなるクラスで、画面表示のあるアプリケーションはこのクラスを継承して います。アクセス修飾子
アクセス修飾子は「指定なし」「public」「private」「protected」があり、それぞれスコープ範囲(アクセス可能かどうか) が異なります。それぞれの許可権限は下記の表のとおりです。
呼び出し元クラス 指定なし public private protected
同じクラス ○ ○ ○ ○ 同じパッケージ内のサブクラス ○ ○ × ○ 同じパッケージの非サブクラス ○ ○ × × 他のパッケージ内のサブクラス × ○ × ○ 他のパッケージの非サブクラス × ○ × ×
メソッド定義
クラスの内部でそれぞれの処理を記述したものをメソッドと呼びます。 アクセス修飾子 戻り値の型 メソッド名(引数の型 引数の名前 , 引数の型 引数の名前 , ・・・) { 処理 return 戻り値 } という記述が基本構造です。 戻り値がないメソッドは戻り値の型に「void」を指定します。 void 型の場合 return 文は不要です。変数の型
それぞれの型宣言は以下の表のとおりです。 型 ビット長 説明 範囲 初期値 基本データ型 char 16 文字列型 半角空白 byte 8 符号付整数型 -128 ~ 127 0 short 16 符号付整数型 -32768 ~ 32767 0 int 32 符号付整数型 -2147483648 ~2147483648-1 0 long 64 符号付整数型 -92337204*10^18 ~ 922337204*10^18-1 0 float 32 浮動小数点型 単精度浮動小数点 0.0 double 64 浮動小数点型 倍精度浮動小数点 0.0 boolean 1 論理型 true または false false オブジェクト型 クラス - オブジェクトの参照 - null@Override アノテーションとは
メソッドの前に記述することによりそのメソッドがオーバーライドメソッドであることをコンパイラに明示します。 そうすることによりオーバーライドが成立していない場合にコンパイラが通知してくれるので、プログラムミスを少 なくすることができます。 ※オーバーライドメソッド もともと実装されているメソッドを記述したメソッドで書き換える処理のこと。画面のデザイン
画面表示のレイアウトはプログラミングによる画面の生成と xml ファイルを利用した表示があります。 ここでは xml ファイルを利用した画面表示を学習します。 「res」フォルダ「layout」内「activity_main.xml」をダブルクリックで開きます。 使用しないビューを閉じた状態 ※ XML エディターを全画面にした時に右側にプロパティが表示されない場合は、一度ウィンドウ表示にし、 アウトラインウインドウを表示させた状態で XML エディターを全画面にすれば表示されます。 ※ ADT の 22.3.0.v201310242005-887826 以降の XML エディターでは、各プロパティの設定追加は一部を除い てアウトライン内のビュー上でマウスの右ボタンをクリックして設定する仕様に統一されています。設定後は 直接プロパティ値を変更できるようになります。右側のテキストビュー「Hello world!」の文字をクリックします。 右側の「アウトライン」ウィンドウの「Properties」の中にある「Text」の項目に注目します。 「@string/hello_world」と設定されているのが確認できます。 この「@string/hello_world」は、「string.xml」の「hello_world」という変数を参照しているという意味です。 Android のアプリケーションはプログラムロジックとデザイン、言語をそれぞれ分けて開発できるように設計され ています。 デザイン画面に表示されている文字列を変更します。 「res」フォルダ「values」内「string.xml」をダブルクリックで開きます。
リソースパネルの「リソース要素」の「hello_world (string)」を選択すると右側の「name」に「hello_world」、「Value*」 に「Hello world!」が表示されているのを確認します。
この「Value*」の「Hello world!」を「ハローワールド」と置き換えてファイルを保存します。
保存後に Eclipse メニューの「プロジェクト」-> 「クリーン」を実行した後「activity_main.xml」を確認するとテキ ストが置き換わっているのが確認できます。
このようにアプリケーションで使用する文字列、カラー、アニメーションなどはプログラムとは別に管理、設定で きるようになっています。
一度実行して結果をエミュレーターで確認してみます。
画面のデザインは「アウトライン」ウィンドウまたは「Structure」のどちらでも操作できます。
基本レイアウトを変更する
ここでは「アウトライン」ウィンドウを使って設定する方法で解説します。 右側の「アウトライン」ビューを確認します。 デフォルトでは「アウトライン」ビューに「RelativeLayout」とその中に「TextView」がひとつ配置されています。 画面の基本レイアウトにはいくつかのタイプがあります。 代表的なものに「LinearLayout」「RelativeLayout」「FrameLayout」等があります。 「LinearLayout」(リニアレイアウト) は画面上にテキストや画像、ボタンなどを配置するコンテナのようなものです。 基本的には上詰に配置され、縦配置と横配置の設定が可能です。 「RelativeLayout」(リレイティブレイアウト) は画面上に配置されるテキストやボタンが相対的な位置設定で配置さ れるレイアウトです。自由度は高いのですが、設定が複雑になりやすい点に注意が必要です。 「FrameLayout」(フレームレイアウト) は地図などの画面を重ね合わせて表示したい場合に利用します。それぞれの パーツがレイヤーのような形で重なります。 ここでは扱いやすい「LinearLayout」(リニアレイアウト) を使用してデザインする方法を解説します。 「アウトライン」ビューで「RelativeLayout」を選択し、マウスの右ボタンをクリックします。「Change Layout」ウインドウが表示されるので「LinearLayout (Vertical)」を選択して「OK」ボタンをクリックします。 これでベースレイアウトを変更できます。
「アウトライン」ビューの「LinearLayout1」をクリックするとのプロパティが表示されます。 「Layout Parameters」の「Width」「Height」プロパティにそれぞれ「match_parent」が設定されています。 この「Layout Parameters」の「Width」「Height」プロパティはレイアウトコンテナの高さと幅をそれぞれ指定して います。 「match_parent」は親要素に対して全部の領域を使うという設定です。 最初のレイアウトコンテナの親要素は画面ということになりますので画面全体がエリアということになります。 他の値として「wrap_content」と「fill_parent」があります。 「wrap_content」は、コンテナ内の要素のサイズに合わせた領域になり、「fill_parent」は「match_parent」と同じ で Android 2.2 以前の設定属性です。 「Orientation」プロパティでコンテナ内での整列方向を決めています。 「horizontal」が横整列「vertical」が縦整列です。 以上がデフォルトで設定されているプロパティですが、この他様々なプロパティがありますので、実際にプログラ ミングを進めながら学習してください。
現在のデザイン画面を変更する
デフォルトのデザイン画面にはテキストビューがひとつ配置されているだけですが、ボタンをひとつ追加します。 ボタンを配置する前にデフォルトで配置されているテキスト(TextView) の「ID」に「@+id/textView1」と設定します。 アウトラインの TextView の上でマウスの右ボタンをクリックして「割り当て ID...」を選択して、表示されたダイア ログに「textView1」と入力します。ボタンの配置
デザイン画面左側の「フォーム・ウィジェット」にある「Button」をクリックしてそのままテキストビューの下へドラッ グします。 アウトラインの「LinearLayout1」の上にドラッグしても配置できます。これでボタンがテキストビューの下に配置されます。 デザイン画面のボタンをクリックするとプロパティウィンドウに各プロパティが表示されるので確認します。 デフォルトで設定されているプロパティ値は Id @+id/button1 Text Button Width wrap_content Height wrap_content となっています。 「Id」はプログラムで参照する場合の名前で、「@+id/...」と記述しておくとプログラム内から「R.id....」という記述 で参照できるようになります。 「Text」はボタンに表示されるテキストです。この表示するテキストはプロパティの値に直接入力する方法と「string. xml」から参照する方法があります。 「Width」と「Height」に設定されている「wrap_content」は表示する文字に合わせたサイズに自動調整される設定 です。「match_parent」または「fill_parent」を設定すると表示エリアいっぱいに拡大されます。
表示するテキストの設定
「Text」の値に直接文字を打ち込んでも設定できますが、汎用性から考えて「strings.xml」に文字を設定し、それを 参照します。
「strings.xml」を開いてリソースパネルの「追加」ボタンをクリックします。
リソースパネルに戻ると新しい「String」が作成されているので、右側の 「Name」に「btn_test」、「Value*」に「テスト」と入力し、保存します。
ここで設定した「btn_test」が他から参照される名前になります。
「activity_main.xml」に戻ってデザイン画面上のボタンをクリックして「Text」プロパティの値を入力する欄を選択し、 右側の参照ボタンをクリックします。
リソース参照画面が表示されるので「btn_test」を選択して「OK」ボタンをクリックします。
「Text」プロパティ値に「@string/btn_test」が設定され、デザイン画面上のボタンのテキストが変更されているこ とを確認します。
オブジェクトの「Id」は通常「Palette」からドラッグした時に自動的に割り当てられますが、状況に応じて他のオブジェ クトと重ならない名前にします。
設定が終わったら「activity_main.xml」を保存して実行してみます。
プログラミング練習
「テスト」ボタンを押したら表示されているテキストビューの文字が変わり、「終了」ボタンを押すと終了するプロ グラムを作ります。リソースの準備
「string.xml」に変更後のテキストと終了ボタンのテキストをそれぞれ設定します。 変更後のテキストを追加 Name change_text Value 変更後のテキスト 終了ボタンのテキストを追加 Name btn_exit Value 終了 設定が終わったら string.xml ファイルを保存します。activity_main.xml に終了ボタンを配置
前述の手順と同様にボタンを一つ配置します。 「Text」プロパティに参照で「string.xml」の「btn_exit」を設定します。コード入力
MainActivity.java を開きます。
画面タイトルを非表示に設定
11 行目「super ....;」の後ろで「Enter」キーを押してスペースをあけます。 自動的にインデントされた状態になります。
「req」と入力し、Ctrl + Space キーを押し、requestWindowFeauture(int featureId) : boolean – Activity を選択します。 (Java では英字の大文字と小文字を区別するので適切に入力します。)
この段階ではまだエラーがあるので() 内に「Win」と入力し Ctrl + Space キーを押し Window – android.view を選択します。 続いてドット「.」を入力します。 Eclipse では、アシスト機能が装備されていて、次に入力するためのリストがアシストウィンドウに表示されます。 これはライブラリの設定項目や予約語、クラスのリストなど、その時によって表示内容が違いますが入力をアシス トしてタイプミスを防いでくれる非常に便利な機能です。 (入力中に Ctrl + Space キーを押すかドット「.」を入力するとアシストできる場合は表示されます。また、エラー表 示「×」をクリックするとその内容や修正リストを表示します。) ここではウィンドウ内の「FEATURE_NO_TITLE」をダブルクリックします。 行の最後にセミコロン「;」を入力します。
入力後のコード requestWindowFeature(Window.FEATURE_NO_TITLE); 入力後に「import android.view.Window;」という記述が追加されていることに注意してください。 アシスト機能を利用して入力したメソッドが含まれるアンドロイドのクラスが自動的に読み込まれています。 このようにほとんどは自動的にアンドロイドのクラスをインポートしてくれますが、記述方法によっては手動でイ ンポートする必要がある場合もあります。 「requestWindowFeature()」は Activity クラスのメソッドで、引数にタイトルなしの定数 「Window.FEATURE_NO_TITLE」を設定しています。 ※この記述は setContentView(R.layout.activity_main); の前に呼び出す必要があるので注意してください。 ※あらかじめクラスには設定されている定数が多くあります。 「クラス名ドット」で表示される大文字の記述がクラスで定義されている定数となります。
activity_main.xml に配置したボタンを使用可能にする
「setContentView(R.layout.main);」の後ろで「Enter」キーを押してスペースを空けます。 (ソースコードを見やすくするために複数行あけても問題ありません。) 次のコードを入力します。※参考入力手順
「But」 と入力して Ctrl + Space キーを押して 「Button」を選択
スペースを 1 つ入れて 「btn_test = (B」と入力して Ctrl + Space キーを押して 「Button」を選択
Button btn_test = (Button) の後に「f」と入力して Ctrl + Space キーを押して
「findViewById(id)」を選択「id」を選択して「R.」と入力して「id.button1」を参照入力します。 最後に行末にセミコロン「;」を追加します。 「mport android.widget.Button;」が自動で追加されていることを確認します。 「import android.widget.Button;」が自動で追加されていない場合は左側行番号にエラー表示「×」が表示されて、 Buttont が赤波表示されます。その場合は赤波の Button をマウスでポイントすると必要なライブラリをインポートさ せることができます。
このように必要なライブラリはその都度追加することができます。 まだ行番号に黄色のマークが表示されていますが、これは注意マークで、この行で宣言した変数 「btn_test」が一度も使われていなため表示されています。 ※ライブラリとは 関連しているクラスを集めてセットにしているものをライブラリと呼びます。 大別すると Java のライブラリと Android のライブラリがあります。 Android には使用できるライブラリが多数ありますので利用しながら学習してください。
コード解説
Button btn_test = (Button)findViewById(R.id.button1);
Button クラスを継承した btn_test を生成して Button としてリソースの button1 の参照値を代入しています。 以降プログラムのこのメソッド内では btn_test という名前で button1 を管理することになります。
(Button) は型キャスト、findViewById() はリソースを参照するときに使うメソッドです。
ボタンにクリックイベントを感知するようにセットする
次の行に「btn_test.seto」Ctrl + Space と入力するとアシストウィンドウが表示されるので「setOnClickListener(OnC lickListener I)」をダブルクリックします。 btn_test.setOnClickListener(this); と入力を完了します。 左側にエラー「×」が表示されます。 このエラーは OnClickListener 機能が実装されていないために表示されています。 OnClickListener は画面のクリックを感知するメソッドです。
実装の方法はクラス全体に実装する方法とオブジェクトそのものに実装する方法がありますが、今回はクラス全体 に実装します。
左側のエラー「×」表示をクリックするか、赤波表示の setOnClickListener をマウスでポイントしてアシストウィ ンドウの「’ MainActivity’ を ’ OnClickListener’ に実装させます」をダブルクリックします。
クラスの宣言部が
public class MainActivity extends Activity {
から
public class MainActivity extends Activity implements OnClickListener { に変更され、左側にエラー「×」が表示されます。
implements ... はクリックリスナーやタッチリスナーなどの機能をクラスに装備させる場合に指定する記述です。こ れは OnClickListener を実装する場合に必要なメソッドが追加されていないために表示されています。左側のエラー 「×」か赤波表示の MainActivity をクリックしてアシストウィンドウの「実装されていないメソッドの追加」をダブル
onCreateOptionsMenu() メソッドの下に新しいメソッド onClick() が追加されます。 OnClickListener は必ずクリックされた時の処理を行う onClick() メソッドとセットで実装します。 このように Eclipse は入力したクラスやメソッドをチェックしてプログラミング上必要な記述を自動的に追加してく れる機能を備えています。この機能をうまく利用すると、素早く少ないタイプ(打ち込み) でプログラムを記述してい くことができます。 同様にもう一つの「Exit」ボタンを btn_exit という変数名でセットします。 Button btn_exit = (Button)findViewById(R.id.button2);
btn_exit.setOnClickListener(this);
これでボタンの実装は完了です。
プログラミングのコツは、まめに動作確認しながら記述ミスがないようにコードを追加していくことがポイントで す。 開発時はデバッグモードでプログラムを実行しながらチェックします。 アプリケーション起動すると画面にデバッグモードであることが表示されます。 デバッグモードで起動した場合、実行中のさまざまな情報をデバッグでチェックすることが可能となりますが、高 度な知識が必要なため本書では解説していません。開発に慣れたら活用してください。 起動を確認したら戻るボタンをクリックして終了します。(まだボタンは動作しません)
ボタンがクリックされた時の処理を記述
ボタンがクリックされた時の処理は onClick() メソッド内に記述します。 自動挿入されているコメント文を消して (残しておいても問題ありません。) int id = v.getId(); と記述します。 この記述は整数型として変数 id を生成してその変数 id にクリックされたボタンの id 値を取得して代入しています。 あとはこの変数 id を元にして条件分岐で処理します。 起動中の画面 動作確認画面if(id == R.id.button1){
クリックされたボタンが button1 の場合の処理 }else if(id == R.id.button2){
クリックされたボタンが button2 の場合の処理 } という記述になります。
「テスト」ボタン (Button1) が押された時の処理
表示されているテキストを変更します。 テキストを変数に実装してその変数のテキストを置き換える記述をします。 TextView text = (TextView)findViewById(R.id.textView1);と入力します。 次にテキストを入れ換える記述 text.setText(R.string.change_text); を入力します。
「終了」ボタン (Button2) が押された時の処理
finish(); を入力します。 これはプログラムを終了する命令です。(正確には現在のアクティビティを終了する命令)これでコードの記述が終わりましたので MainActivity.java を保存して実行します。
動作の確認
「テスト」ボタンをクリックするとテキストが置き換わり、「終了」ボタンをクリックするとアプリケーションが終 了します。プログラムの変更
動作の確認ができたので少し変更を加えます。 変更する部分はテキストとボタンの位置、「テスト」ボタンをトグル式ボタンに変更し、文字列が交互に換る設定に します。レイアウトの変更
activity_main.xml を変更します。 画面レイアウトのデザインでは少し工夫が必要になります。 xml のソースの記述を直接書き換えても同じことですが、ここではデザイン画面でデザインする練習をします。 「終了」ボタンの下に新規リニアレイアウト(Vertical) をドラッグして配置します。配置したリニアレイアウトの Width と Height を match_parent に変更します。 配置したリニアレイアウトにテキストビューをドラッグして移動します。
テキストビューを配置したリニアレイアウトの Gravity を center にします。
テキストビューを配置したリニアレイアウトの下に新規リニアレイアウト(Horizontal) をドラッグして配置します。 (アウトラインの LinearLayout1 にドラッグしても配置できます)
配置したリニアレイアウトに button1 と button2 をドラッグして配置します。
ボタンを移動後 TextView1 が入っているリニアレイアウトの Weight に「1」を設定します。 (隠れていたボタンが表示されるようになります)
ボタンを移動して Weight を設定した状態
このようにそれぞれのパーツのプロパティを変更して画面を設定します。 画面はこれで完成です。
activity_main.xml を保存してエミュレーターで確認します。
設定後の画面
Gravity の設定値
設定値 内容 top 上部から配置 bottom 下部から配置 left 左から配置 right 右から配置 center_horizontal 水平の中央に配置 center_vertical 垂直の中央に配置 center コンテナの中央に配置 fill_vertical オブジェクトの高さを、コンテナのサイズに合わせて配置 fill_horizontal オブジェクトの幅を、コンテナのサイズに合わせて配置 fill オブジェクトの高さ・幅を、コンテナのサイズに合わせて配置 clip_vertical top/bottom の追加オプションとして、オブジェクトの上部 / 下部の境界をコンテナ の境界に合わせて配置 clip_horizontal 境界に合わせて配置left/right の追加オプションとして、オブジェクトの左側 / 右側の境界をコンテナのコードの変更
「テスト」ボタンのトグル機能はフラグ変数を利用して if 文で制御します。 クラス内で参照できる変数を初期値 false で設置します。
private boolean flag = false; をメソッドの外側で宣言します。
onClick() メソッド内のテキストビューの文字列の置き換え部分を変更します。 TextView text = (TextView)findViewById(R.id.textView1);
if(flag){ text.setText(R.string.hello_world); flag = false; }else{ text.setText(R.string.change_text); flag = true; } ソースコードの編集が終わったら MainActivity.java を保存してエミュレーターで実行します。 「テスト」ボタンがトグル式になっていることを確認します。
MainActivity.java ソースコード
package com.example.helloworld; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener { // トグルボタン用フラグ
private boolean flag = false; @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // タイトルバー非表示設定 requestWindowFeature(Window.FEATURE_NO_TITLE); // 画面セット setContentView(R.layout.activity_main); // テストボタンの宣言とオンクリックリスナー Button btn_test = (Button)findViewById(R.id.button1); btn_test.setOnClickListener(this);
// 終了ボタンの宣言とオンクリックリスナー
Button btn_exit = (Button)findViewById(R.id.button2); btn_exit.setOnClickListener(this);
}
// メニュー設定(未使用) @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu);
return true; }
@Override
public void onClick(View v) { int id = v.getId(); // ボタンクリック時の処理
if(flag){ // テキスト表示処理 text.setText(R.string.hello_world); flag = false; }else{ // テキスト表示処理 text.setText(R.string.change_text); flag = true; }
}else if(id == R.id.button2){ // アクティビティ終了処理 finish(); } } }
アクティビティとビューについて
アクティビティはユーザーからの操作を受け付けるウィンドウ(画面) を制御するクラスで、多くのアプリケーショ ンは複数のアクティビティの組み合わせで構成されています。 アクティビティ内に配置されるテキストやボタンなどのユーザーインターフェース部品をビューと呼びます。 アクティビティはそれぞれ重ね合わせるように表示されるので、新しいアクティビティが呼び出されると呼び出し 元のアクティビティの画面がそのバックグラウンドに隠れます。アクティビティ起動イメージ
Android は表示できるウィンドウが一つに限られているので、ユーザーの処理を受け取るアクティビティも一つで す。(フラグメントアクティビティを利用すると複数表示が可能となります。) 元のアクティビティに戻るには呼び出したアクティビティを終了させることによってバックグラウンドからフォア グラウンドに呼び出されます。 ビューにはボタンやテキストなどのパーツとそれらのパーツを整列、配置するレイアウトとユーザーの簡単な操作 を受け取る小さなウィンドウで開くダイアログがあります。 パーツとレイアウトはリソースという形であらかじめ静的に作成しておく方法とプログラムで自動的に生成する方 法があります。 ダイアログはリソースでは作れないのでプログラムで生成します。Java の条件分岐 if 文について
パターン 1
if( 条件式 ) { 条件が真(true) の場合に実行される命令文 }パターン 2
if( 条件式 ) { 条件が真(true) の場合に実行される命令文 } else { 条件が偽(false) の場合に実行される命令文 }パターン 3
if( 条件式 1) { 条件式 1 が真(true) の場合に実行される命令文 } else if( 条件式 2) { 条件式 1 が偽(false) で条件式 2 が真(true) の場合に実行される命令文 } else { いずれの条件にもあてはまらない場合に実行される命令文 }Java の演算子
算術演算子
演算子 意味 使用例 計算結果 + 加算 1 + 2 3 - 減算 3- 2 1 - 符号反転 -(-5) 5 * 乗算 ( × ) 2*2 4 / 商算 ( ÷ ) 6/3 2 % 余り 10%3 1比較演算子
論理演算子
真理値表
演算子 使用例 解説 > x > y x が y よりも大きい場合に true を返す。 >= x >= y x が y よりも大きいか等しい場合に true を返す。 < x < y x が y よりも小さい場合に true を返す。 <= x <= y x が y よりも小さいか等しい場合に true を返す。 == x == y x と y が等しい場合に true を返す。 != x != y x と y が等しくない場合に true を返す。instanceof x instanceof y x が y と同じクラスか y のサブクラスである場合に true を返す。
演算子 使用例 解説
& 条件 a & 条件 b 条件 a と条件 b の AND (論理積) どちらも真なら真 | 条件 a | 条件 b 条件 a と条件 b の OR (論理和) どちらかが真なら真
^ 条件 a ^ 条件 b 条件 a と条件 b の XOR (排他的論理和) 真と真か偽と偽なら偽 ! ! 条件 a 条件 a の NOT (否定) a でなければ真
&& 条件 a && 条件 b & と同じだが、条件 a が偽の場合は条件 b は処理されない || 条件 a || 条件 b | と同じだが、条件 a が真の場合は条件 b は処理されない a b AND OR XOR 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0
代入演算子
文字列演算子
複合代入演算子
代入と一緒に他の演算を行える演算子。 演算子 意味 使用例 計算結果 = 変数 = 式 ( 変数に式の値を代入する ) a = 10+2 12 演算子 意味 使用例 結果+ 文字列の連結 "abc" + "defg" "abcdefg"
演算子 意味 使用例 結果 += 加算後の結果を代入 a += 10 a = a + 10 と同じ -= 減算後の結果を代入 a -= 10 a = a - 10 と同じ *= 乗算後の結果を代入 a *= 10 a = a * 10 と同じ /= 商算後の結果を代入 a /= 10 a = a / 10 と同じ %= 余り後の結果を代入 a %= 10 a = a % 10 と同じ