アクティビティとレイアウト
Androidアプリは「アクティビティ」と呼ばれるクラスとして作成されます。これとレイアウトを定義したXMLファイルがわかればとりあえずアプリの基本がわかる
だそうな。そういわれてもまだ全然意味がわかりません・・もうちょっと見ていきましょう。
「なにもしないプログラム」でやった通り、簡単なテキストが表示されました。このアプリで画面に表示される部分は「アクティビティ」と呼ばれます。Androidアプリはこのアクティビティを作ることから始まります。
なるほど、PCでいう所の実行したソフトやアプリケーションの専用画面的なものですね。
「画面に表示される部分(アクティビティ)」は「アクティビティのクラス」と「表示する画面のレイアウトデータ」の2つでできています。
レイアウトデータ
「res」フォルダ内の「layout」内に保管されている「main.xml」というファイルで、ダブルクリックするとビジュアルエディッタが起動します。これは「Androidレイアウトエディタ」と呼ばれるもので左側に、Androidの画面に配置して使える部品がずらりと並び、その右に画面のデザインが表示されます。左側にある部品を、その右のデザインエリアにドラッグして部品を配置できます。「なにもしないプログラム」のような初期状態では、「TextView」という部品が1つ配置されています。これはテキストを表示するための部品です。Androidでは、テキストなども全部こうやって部品として配置していきます。「Androidレイアウトエディタ」でタブを切り替えてあげるとソースコードが表示されます。色々書いてありますが
<?xml version="1.0! encoding="utf-8"?> <LinearLayout ・・・略・・・> <TextView ・・・略・・・/> </LinearLayout> |
となっています。<LinearLayout>ー</LinearLayout>というタグの中に<TextView/>というタグがが挟まれた形をしています。
LinearLayouはまっすぐ部品を並べるためのレイアウトを提供する部品です。Androidでは、ボタンのようにそれ自体が何かを表示して操作する部品の他に、「画面には表示されない、見えない部品」というのがあります。このLinearLayouもその一つです。LinearLayouは、部品をきれいに並べて配置する働きをする部品です。これの中に部品をいれると、それらを縦にきれいに並べて配置してくれるのです。Androidのレイアウトは、このように「まずレイアウト用の部品をおき、その中に実際に表示される部品を置く」という形で行います。
木で出来た「ボタン」「テキスト」とかがあったら、地面や空中に置いてもバラバラになっちゃうから、「木で出来た枠」みたいなのも必要です。とかって意味かな?
アクティビティクラス
「src」内から進んでいくとjavaファイルがあると思います。それを開くとソースコードが表示されます。色々書いてありますが「なにもしないプログラム」を開くと下記な感じですよね。
package and.roid;
import android.app.Activity; public class Text1Activity extends Activity { |
|
public class クラス名 extends 継承元クラス { @Override public void メソッド名 (引数) { ・・・実行する処理・・・ } } |
「Text1Activity」というクラスを作っていて、これはandroid.appパッケージにあるActivityというクラスを継承(取り入れている)している。ということがわかります。継承というものをすると継承元に登録されているメソッド(命令)コードを使うことができますので,、「onCreate」というメソッド(命令)を使用しています。ここで登場した「Activity」というのがアクティビティを作成する際に用いられるクラスです。すべてもアクティビティは、必ずこのActivityを継承して作られます。このActivityには、インスタンス(オブジェクト思考用語)を作成する際に呼び出される「onCreate」というメソッド(命令)があり、これをオーバーライドして、アクティビティの初期化処理を用意します。ーーー要するに「onCreateメソッド(命令)を作って、そこにアクティビティを表示させる時に必要な処理を書いておけば、そのアクティビティが使われる時に自動的に実行される」というわけです
わけですと言われてもややこしいですが、画面表示させるにはアクティビティが必要なので「onCreate」というメソッドを使っておけば自動で色々してくれるってことなのかな。
アクティビティーは、アプリ全体を管理しているクラス。これがレイアウトを読み込んで画面に表示している。
コンテンツビュー(ContentView)
これが、実際に画面に表示される部品と考えて下さい。この「setContentView」というメソッドの引数に用意された部品が、そのままアクティビティの画面として表示されるのです。
ここでは「R.layout.main」というものが指定されていますが、これが「res」フォルダの「layout」内にある「main.xml」のレイアウトデータによって生成されたオブジェクトになります。「layout」内のレイアウトデータは、このように「R.layout.名前」という形でオブジェクトが用意されます。これは「gen」フォルダの中に自動的に作られている「R.java」というソースコードで用意されています。このRクラスは自分で書き換えたりすることはできずその内容を理解する必要はありません。必要なのは「レイアウトデータなどがどういう名前で用意され利用できるようになっているか」ということだけです。「○○.xml」というファイル名のレイアウトデータは「R.layout.○○」という名前のオブジェクトになっている、ということだけ覚えてください。
とりあえずこの「onCreate」の中で、「layout.xmlで作られるR.layout.mainというオブジェクトをコンテントビューに設定して表示させる」ということがわかりました。アクティビティクラスに必要な処理はたったこれだけだったのです。
そ・・そうね・・これだけね・・って一生続くんじゃないかってくらい長くて、なんとなくわかったけど意味はわかりませんよ?って感じです。しかしたったこれだけってことなので文章は長いけど大事なとこだけ抜き出すと
アクティビティーは、アプリ全体を管理しているクラス。これがレイアウトを読み込んで画面に表示している。
layout.xmlで作られるR.layout.mainというオブジェクトをコンテントビューに設定して表示させる
こんな感じで覚えておきますかね。