2008年03月28日
Androidプレゼンテーション
さて、前回に続いて、Androidのアプリケーションを作りました。
今度は、「Androidでプレゼン!」ということで、プレゼンテーションをするためのツールを作ってみました。
※こちらから、ダウンロードできます。ソース&サンプルです。
今回のキモは、「画面の書き換え」です。
通常のView(画面)は、layout XMLによる画面の定義 と それを動的に(DBからのデータを表示など)書き換えるためのActionを定義したJavaアプリという2つのものが連携して、画面が定義されます。
しかし、プレゼンテーションにおいては、
画面の定義 + 次の画面への移動
が、基本的な動きとなります。
しかし、AndroidのView(画面)の仕様ですと、「次の画面への移動」を実現するために、各ページごとのActionのJavaアプリを書かなくてはなりません。
でも、プレゼンを書きたいだけであれば、ActionのJavaアプリまで書きたくありません。
そこで、今回は、layout XMLだけで、「次の画面への移動」が出来るようにしました。
■仕様
・layout XMLによる、画面の定義
layout XMLのファイル名を、
presentation_page_N.xml
N・・・ページ番号
各ページの画面を定義することにより、「presentation_page_N.xml」が1枚に付き、1画面として構成される。
Viewは、全て使用することが出来るため、通常のAndroidのViewと同じ手順で記述可能。
※次のページへは、「↓」または「→」キーで、前のページへは、「↑」または「←」キーで移動する。
・テキストのフェード処理の追加
「次の画面への移動」と同じ動作で、ViewFlipperが動作するように改良。
■キモの解説
・ActionにおけるView(画面)の設定とは?
Action内で、layout XMLを画面として設定する(layout XMLとして、presentation_page_N.xmlを適用したい場合)には、
setContentView(R.layout.presentation_page_N)
のように、行います。
こうすると、layout XMLに定義された画面がAction(アプリケーション)に適用されます。
・R.layout.presentation_page_Nとは?
R.layout.presentation_page_Nは、Androidが自動で生成する「Rファイル」と呼ばれるものの一部です。
layout XMLが、「R.layout.layout XMLのファイル名」という命名規則にしたがって、Rファイル内に「static int」型として、登録されます。
そして、これを使用して、layout XML情報を取得するという形なのです。
・presentation_page_N.xml の取得
少し考えてみると、
「R.layout.presentation_page_N」は、「static int」型であり、Androidにおいては、変更されないことが前提となっている
と予測されます。
しかし、
「static int」型ということは、事前に作られていることも前提となっている
ということでもあります。
が、
「R.layout.layout XMLのファイル名」という命名規則は決まっている
のです。
ということは、
layout XMLのファイル名に命名規則があれば、RファイルからReflectionAPIを用いて取得することが可能
であります!
・まとめると、、、
ということで、下記のような処理を行っているのが実体となります。
1,layout XMLのファイル名を、「presentation_page_N.xml」という命名規則に基づいて定義する(N・・・ページ番号)
2,ReflectionAPIを用いて、Rファイルのlayoutから、presentation_page_Nという名前のFieldを取得する
3,上記のFieldから、int値を取得して、ListやMapに保持しておく
4,次ページ処理時は、上記のListやMapから、layout XMLのファイル名のintを取得して、setContentView(int)メソッドで、画面(VIew)の書き換えを行う。
ということで、Androidアプリと言うよりは、Androidハックという感じの一発ネタアプリとなっております。(;^_^A アセアセ・・・
- by noritsuna
- at 23:17