第2章 |
|
この章では、エミュレータスキンの定義について説明します。エミュレータの既存のスキンを変更することも、新しいスキンを作成することもできます。この処理をエミュレータの「スキニング」と呼びます。
エミュレータスキンは、1 つのプロパティーファイルによって定義されます。各スキンプロパティーファイルは、toolkit¥wtklib¥devicest の独自のサブディレクトリに格納されます。ここで toolkit は Sun Java Wireless Toolkit for CLDC のインストールディレクトリです。プロパティーファイルの名前は、ディレクトリ名と一致します。
たとえば、DefaultColorPhone スキンは toolkit¥wtklib¥devices¥DefaultColorPhone ディレクトリの DefaultColorPhone.properties によって定義されます。
スキンプロパティーファイルは、エミュレータスキンの外観と動作を定義します。このファイルには、画像とサウンド (同じディレクトリにある場合もそうでない場合もある) へのポインタが含まれています。たとえば、DefaultColorPhone ディレクトリには電話そのものの画像が含まれますが、DefaultColorPhone のアイコンとサウンドは wtklib¥devices¥Share で定義されます。
この章の残りの部分では、スキンプロパティーファイルの内容について説明します。プロパティーファイルは、プレーンテキストファイルです。このファイルは、任意のテキストエディタを使って変更できます。通常、プロパティーファイルのエントリには後ろに値を付けたプロパティー名を指定します。名前と値は、コロンまたは等号で区切ります。ハッシュ記号 (#) で始まる行はコメントです。
新しいスキンを作成するもっとも簡単な方法は、既存のスキンをコピーして、それを変更することです。たとえば、次のようになります。
1. DefaultColorPhone ディレクトリをコピーします。
3. プロパティーファイルの名前をディレクトリ名に合わせて変更します。
ディレクトリ名を NewSkin にした場合は、プロパティーファイルの名前を NewSkin.properties に変更します。
エミュレータスキンの全体の外観は、さまざまな要因によって決められます。この節では、それぞれの要因について説明します。
スキンの外観の多くは、次の 3 つの画像によって決められます。
1. 「デフォルト」の画像には、ニュートラルな (標準の) 状態のデバイスが表示されます。
2. 「強調表示された」画像には、すべてのボタンが強調表示されている (ユーザーがボタンの上にマウスを移動したときのように) デバイスが表示されます。
3. 「押された」画像には、すべてのボタンが押されているデバイスが表示されます。
それぞれの画像には、デバイス全体が表示されます。このツールキットでは、これらの部分の画像を使用して、ボタンが強調表示された状態やボタンが押された状態を示します。
たとえば、図 2-1 に DefaultColorPhone の 3 つの画像を示します。
図 2-2 に、3 つの画像の違いがわかるように、各キーパッドの一部を拡大して表示します。
スキンプロパティーファイルでは、3 つの画像ファイルは次のプロパティーで指定されます。
画像ファイルは、PNG、GIF、または JPEG のいずれでもかまいません。画像ファイルはすべて同じ寸法にします。たとえば、DefaultColorPhone.properties には次のエントリが含まれます。
画面は、実際のデバイスのディスプレイを表します。画面は、画面全体の範囲、「描画可能」範囲、および表示色数のような要因を決めるその他のパラメータによって定義されます。
画面全体の範囲は、ディスプレイの全領域となります。左上の角 (0,0) にある画像ファイルの起点を基準にしたピクセル単位の測定値で定義されます。
画面の範囲は、プロパティーファイル内で次のように指定されます。
ほとんどのデバイスでは、表示領域全体を MIDP アプリケーションが使用できるようにしていません。画面の残りの部分は通常、各種のアイコンやインジケータ用に予約されています。同様に、Sun Java Wireless Toolkit for CLDC エミュレータでは、MIDP アプリケーションに使用できる、「描画可能」領域と呼ばれる画面全体のサブセットを定義できます。描画可能領域の起点は、ディスプレイの左上の角を基準にした座標で表されます。たとえば、図 2-4 に示すように、DefaultColorPhone エミュレータスキンでは、いちばん上のバーをアイコンに使用し、いちばん下のバーをソフトウェアのラベルとその他のアイコンに使用しています。
エミュレータスキンプロパティーファイルでは、描画可能領域は次のように表されます。
x 座標と y 座標は、画面位置 (画面の左上の角) からの相対位置で指定します。また、screenPaintableRegion の幅と高さの値は、対応する screen.width と screen.height の値を超えてはいけません。
注 - 全画面モード (MIDP 2.0 以降) では、エミュレータは描画可能領域の起点から始まり、画面の右下の角まで広がる領域を使用します。DefaultColorPhone では、いちばん上のバーを除く画面領域全体になります。 |
エミュレータスキンプロパティーファイルでは、画面によってサポートされる表示色数やピクセルの縦横比を指定します。iscolor では、エミュレータスキンでカラー表示とグレースケール表示のどちらを使用するかを指定します。
カラー表示の場合は true、グレースケール表示の場合は false を指定します。
colorCount では、表示色数を指定します。グレースケール表示のデバイスでは、階調数を指定します。
たとえば、DefaultColorPhone には 4096 色のカラー表示画面があります。
isColor=true
colorCount=0x1000
このオプションでは、エミュレータのアルファ (透明度) の処理を有効にするかどうかを指定します。
この値では、ガンマ補正を有効にするかどうかを指定します。値 1 はエラー訂正がないことを意味します。
true を指定するとダブルバッファリングが有効になり、false を指定すると無効になります。
screenBorderColor では、画面の描画不可能領域に使用される背景色を指定します。たとえば、DefaultColorPhone では次の色を使用します。
screenBorderColor=0xb6b6aa
このプロパティーを使用して、グレースケール表示のデバイスでの画面の背景色を設定します。
Sun Java Wireless Toolkit for CLDC エミュレータでは、アイコン (ユーザーに情報を伝達する小さい画像) を使用できます。通常、アイコンはディスプレイの描画可能領域の外側に配置されます。エミュレータは、表 2-1 で説明されている定義済みのアイコンを実装しています。
アイコンは、画面の起点を基準にして測定した位置、デフォルト状態、および考えられる状態に対応する画像のリストによって定義されます。たとえば、DefaultColorPhone の down アイコンの定義は次のようになります。このアイコンは、表示可能な画面領域よりも長いリストまたはフォームが示されたときに表示される下向き矢印です。
icon.down: 113, 314, off icon.down.off: icon.down.on: ../Share/down.gif
最初の行では、アイコンが表示される位置を指定します。DefaultColorPhone の場合は、描画可能な画面領域の外側にあるいちばん下のバーの中央の位置になります。デフォルト状態は、off です。
off 状態に対応する画像ファイルはありませんが、on 状態では wtklib¥devices¥Share ディレクトリの画像 down.gif を使用します。
もう 1 つの興味深い例として、7 つの状態に 6 つの対応する画像ファイルを持つ inmode アイコンがあります。
icon.inmode: 113, 2, off icon.inmode.off: icon.inmode.ABC: ../Share/ABC.gif icon.inmode.abc: ../Share/abc_lower.gif icon.inmode.123: ../Share/123.gif icon.inmode.kana: ../Share/kana.gif icon.inmode.hira: ../Share/hira.gif icon.inmode.sym: ../Share/sym.gif
アイコンに似ているエミュレータのもう 1 つの側面として、ネットワークインジケータがあります。ネットワークインジケータは、画面内に配置されるのではなく、エミュレータスキンに表示されます。DefaultColorPhone では、ネットワークインジケータはエミュレータスキンの左上に小さな緑色のライトとして表示されます。ネットワークインジケータは、次の 2 つのプロパティーを使用して定義されます。
たとえば、DefaultColorPhone では、ネットワークインジケータは次のように定義されます。
幅と高さは、ネットワークインジケータ画像の幅と高さに一致しているはすです。
エミュレータによって使用されるフォントは、スキンプロパティーファイルで定義します。フォントは、基本的に MIDP の Font クラスで利用できるフォントフェース、フォントスタイル、およびフォントサイズごとに定義できます。構文は次のとおりです。
font.フェース.スタイル.サイズ: フォント指定子
フェース、スタイル、サイズ の各パラメータは、MIDP の Font API から推測できますが、エミュレータスキンプロパティーファイルでは識別子は小文字になります。フォントフェースは system、monospace、または proportional、フォントスタイルは plain、bold、または italic、フォントサイズは small、medium、または large です。
フォント指定子 は、Java Platform, Standard Edition (Java SE) java.awt.Font クラスライブラリで設定された表記規則に従います。DefaultColorPhone の次の例では、3 つのすべてのサイズでプロポーショナルイタリックフォントを定義しています。
font.proportional.italic.small: SansSerif-italic-9 font.proportional.italic.medium: SansSerif-italic-11 font.proportional.italic.large: SansSerif-italic-14
使用できる定義がほかにない場合に使用されるデフォルトフォントを指定する必要があります。DefaultColorPhone では、10 ポイントの SansSerif フォントがデフォルトとして使用されます。
font.default=SansSerif-plain-10
フォントには下線を付けることもできます。デフォルトでは、下線付きフォントは MIDP の実装によってサポートされていますが、次のように特定のフォントに対してのみ下線の表示を無効にすることもできます。
font.face.style.size.underline.enabled=false
必要に応じて、次のようにすべてのフォントに対して下線の表示を無効にすることもできます。
font.all.underline.enabled=false
システムフォントを使用する代わりに、「ビットマップ」フォントを使用することもできます。ビットマップフォントは、フォントの文字形状を含む画像です。ビットマップフォントの画像は、いずれかの文字形状を含む 1 行のテキストです。ビットマップフォントを定義するには、次のプロパティーを使用します。
font.name=font-property-file
フォントプロパティーファイルには、次のプロパティー定義が含まれます。
画像ファイルは、PNG 形式、GIF 形式、または JPEG 形式のいずれでもかまいません。このファイルでは、文字を 1 列に並べる必要があります。図 2-5 では、見やすさのために文字を 2 行で表示しています。
高さ、アセント、ディセント、およびレディングはすべてピクセル単位で指定されます。これらのフォント用語に詳しくない場合は、java.awt.FontMetrics の Java SE のマニュアルを参照してください。
フォントプロパティーファイルには、ASCII 文字コードと画像中のピクセル数で表した水平オフセットとのマッピングリストも含める必要があります。次の例では、ASCII コード 65 が水平オフセット 124 にマップされます。
ascii_x-65=124
ビットマップフォントを一度定義すると、その名前をフォント指定子として使用できます。
ソフトウェアボタンとは、定義済みの機能を持たないボタンのことです。ソフトウェアボタンについては、この章で詳しく後述します。ソフトウェアボタンのラベルは、画面に表示されます。エミュレータスキンプロパティーファイルでは、ソフトウェアボタンのラベルの表示位置と表示方法を指定します。
ソフトウェアボタンのラベルのフォントは、フォントの別名 (フォントに割り当てる短い名前) を使用して定義されます。各ソフトウェアボタンのラベルは、次のプロパティーによって記述されます。
softbutton.n=x, y, width, height, font-alias, alignment
alignment の有効な値は、left、right、および center です。
たとえば、次のプロパティーを指定すると、ソフトウェアボタンのラベルには 12 ポイントの Courier フォントが使用されます。
まず、フォントの別名 softButton を定義します。最初のラベルは左詰めになり、2 番目のラベルは右詰めになります。
MIDP の警告には、サウンドが関連付けられています。Sun Java Wireless Toolkit for CLDC エミュレータのサウンドは、MIDP の AlertType クラスに列挙されているタイプごとに 1 つずつ、ファイルを使用して定義されます。エミュレータでは、基本となる Java SE の実装によってサポートされているどのサウンドファイルタイプでも使用できます。Java SE Development Kit 1.5 では、AIFF、AU、WAV、MIDI、RMF などのタイプがあります。たとえば、DefaultColorPhone での定義を次に示します。
alert.alarm.sound: ../Share/mid_alarm.wav alert.info.sound: ../Share/mid_info.wav alert.warning.sound: ../Share/mid_warn.wav alert.error.sound: ../Share/mid_err.wav alert.confirmation.sound: ../Share/mid_confirm.wav
デフォルトサウンドは、特定の警告タイプにサウンドが定義されていない場合に再生されます。
alert.confirmation.sound: サウンドファイル
また、電話の振動のように再生されるサウンドを定義することもできます。DefaultColorPhone では、次のように定義されます。
vibrator.sound: ../Share/vibrate.wav
エミュレータスキンの説明は 2 つに分けられます。最初は外観についてで、すでに説明しました。2 つ目は、ユーザー入力がエミュレータでどのように割り当てられるかを定義します。
キーボードハンドラは、ボタンが押されたことを認識し、適切なアクションをエミュレータで実行します。たとえば、マウスを使ってソフトウェアボタンのいずれかを押した場合、エミュレータで適切なアクションが行われるようにするのはキーボードハンドラです。
キーボードハンドラでは 1 組の標準のボタン名を定義し、ユーザーはその名前を使ってボタンを定義します。エミュレータスキンのどこにボタンが配置されるかを指定するだけで、残りの作業はキーボードハンドラが行います。
Sun Java Wireless Toolkit for CLDC エミュレータにはキーボードハンドラが 2 つあります。1 つは、ITU-T キーパッド (DefaultKeyboardHandler) を備えた電話デバイス用で、もう 1 つは完全な Qwerty キーボードを備えたデバイス用です。たとえば、DefaultColorPhone には次のキーボードハンドラプロパティーが含まれます。
keyboard.handler = com.sun.kvem.midp.DefaultKeyboardHandler
DefaultKeyboardHandler では、次の標準のボタン名を認識します。0 〜 9、POUND、ASTERISK、POWER、SEND、END、LEFT、RIGHT、UP、DOWN、SELECT、SOFT1、SOFT2、SOFT3、SOFT4、USER1 〜 USER10。
QwertyDevice では、キーボードハンドラは次のように定義されます。
keyboard.handler = com.sun.kvem.midp.QwertyKeyboardHandler
QwertyKeyboardHandler では DefaultKeyboardHandler と同じボタンをサポートしますが、アルファベットキー、Shift キー、Alt キーなどの標準キーボードにあるボタンも含まれます。
ボタンは、名前と 1 組の座標を使って定義します。2 組の座標を指定すると、四角形のボタンが定義されます。2 組を超える座標を指定すると、多角形の領域がボタンに使用されます。
ボタン領域は、デバイススキンの画像を基準にして定義されます。ユーザーが定義されたボタン領域の上にマウスを移動すると、強調表示されたスキン画像の対応する領域が表示されます。ユーザーがボタンを押すと、押された状態のスキン画像の対応する領域が表示されます。
ボタンは、それだけではあまり意味がありません。ボタン名を四角形または多角形の領域に関連付けるだけです。ボタン名をエミュレータの機能に割り当てるのは、キーボードハンドラの役目です。2.3.3, ボタンへのデスクトップキーボードキーの割り当てでは、デスクトップコンピュータのキーボードのキーをどのようにボタンに割り当てることができるかについて説明します。
次のプロパティーは、5 のボタンの四角形の領域を定義する方法を示しています。ボタンの起点は 140, 553 で、幅は 84、高さは 37 です。
button.5 = 140, 553, 84, 37
button.ASTERISK = 66, 605, 110, 606, 140, 636, 120, 647, 70, 637
この多角形は、次に示す点をつなぐ直線セグメントを使用して定義されます。
66, 605 110, 606 140, 636 120, 647 70, 637
ボタンには、1 つ以上のデスクトップキーボードのキーを関連付けることができます。つまり、デバイススキンの上にマウスを移動してマウスボタンを押す代わりに、デスクトップキーボードを使用してエミュレータを制御できます。
たとえば DefaultColorPhone では、デスクトップキーボードの F1 キーを押すと、左ソフトウェアボタンと同じ操作を実行できます。左ソフトウェアボタンは、次のように、プロパティーファイルで SOFT1 として定義されています。
button.SOFT1 = 78, 417, 120, 423, 126, 465, 74, 440
デスクトップキーボードのショートカットは次のように定義されます。
key.SOFT1 = VK_F1
実際のキー定義は virtual key codes であり、これは Java SE の java.awt.event.KeyEvent クラスライブラリに定義されています。詳細については、Java SE のマニュアルを参照してください。
必要に応じて、複数のデスクトップキーボードキーを 1 つのボタンに割り当てることができます。次の DefaultColorPhone の例では、デスクトップキーボードの 5 キーまたは数値キーパッドの 5 キーはどちらもエミュレータスキンの 5 ボタンのショートカットとして定義されています。
key.5 = VK_5 VK_NUMPAD5
ゲームアクションは DefaultKeyboardHandler にすでに定義されていますが、QwertyKeyboardHandler を使用して独自のゲームアクションを指定できます。そのためには、次の形式を使用します。
game.function = button-name
機能 (function) には、LEFT、RIGHT、UP、DOWN、SELECT のいずれかを指定できます。標準のボタン名については、この章で前述しています。
QwertyKeyboardHandler を使用すると、ボタンを単独で押したときや、Shift キーや Alt キーと同時に押したときに生成される文字を指定できます。
keyboard.handler.qwerty.button = 'base-character' 'shift-character' 'alternate-character'
ベース文字はボタンを単独で押したときに生成される文字、Shift 文字はボタンと Shift キーを同時に押したときに生成される文字、Alt 文字はボタンと Alt キーを同時に押したときに生成される文字です。
ボタンを Shift キーや Alt キーと同時に押したときの動作は、次の 2 とおりの方法でエミュレートします。
keyboard.handler.qwerty.A = 'a' 'A' '?'
コマンドは、MIDP 仕様の一部です。コマンドは、ユーザーが利用できるようにすることが必要なアクションを指定する柔軟な方法です。特定のデバイスでどのように利用可能にするかを指定する必要はありません。
通常、MIDP デバイスではソフトウェアボタンを使用してコマンドを呼び出します。コマンドテキストは、ディスプレイのソフトウェアボタンに物理的に近い場所に表示されます。使用できるソフトウェアボタンよりも利用可能なコマンドの数が多い場合は、1 つのソフトウェアボタンのラベルがメニューとして表示されます。メニューのソフトウェアボタンを押すと、使用できるコマンドのメニューが表示されます。
Sun Java Wireless Toolkit for CLDC エミュレータでは、javax.microedition.lcdui.Command に指定されているコマンドの種類に基づいて、特定のタイプのコマンドの表示場所を指定できます。たとえば、2 つのソフトウェアボタンを持つエミュレータスキンでは、BACK コマンドおよび EXIT コマンドを常に左ソフトウェアボタンに表示し、OK コマンドを右ソフトウェアボタンに表示するようにできます。
このような種類の設定をエミュレータスキンプロパティーファイルに指定するには、次のような行を使用します。
command.keys.command-type=button
たとえば、DefaultColorPhone では次のようにコマンド設定を定義します。
command.keys.BACK = SOFT1 command.keys.EXIT = SOFT1 command.keys.CANCEL = SOFT1 command.keys.STOP = SOFT1
command.keys.OK = SOFT2 command.keys.SCREEN = SOFT2 command.keys.ITEM = SOFT2 command.keys.HELP = SOFT2
その他のボタン名を指定すると、特定のコマンドの種類にほかの優先ボタンを割り当てることができます。たとえば、次の行では、END が利用可能な場合は BACK コマンドを END に割り当て、そうでない場合は SOFT1 に割り当てるようにエミュレータに指示します。
command.keys.BACK = END SOFT1
最後に、必要に応じて、ソフトウェアボタンが特定のコマンドの種類にのみ使用されるように指定することもできます。次の定義では、コマンドの種類 BACK、EXIT、CANCEL、および STOP だけに SOFT1 キーを制限しています。
command.exclusive.SOFT1 = BACK EXIT CANCEL STOP
使用できるソフトウェアボタンの数がコマンドの数よりも少ない場合、コマンドはメニューに配置されます。Sun Java Wireless Toolkit for CLDC エミュレータでは、コマンドメニューを制御できます。メニューの表示に使用するボタン、メニュー項目のスクロールに使用するボタン、およびメニューとして表示されるテキストラベルを選択できます。
DefaultColorPhone の次のプロパティーでは、メニューの表示または非表示に 2 番目のソフトウェアボタンを使用するようエミュレータスキンに指示します。
command.menu.activate = SOFT2
デフォルトでは、UP ボタンと DOWN ボタンがメニューのスクロールに使用され、SELECT ボタンがコマンドの選択に使用されます。これらの割り当ては、次のプロパティーを使用して変更できます。
MIDP 仕様では、着呼のようなほかの電話イベントに対応する場合など、アプリケーション (MIDlet) をいつでも一時停止できます。
エミュレータスキンプロパティーファイルを使用して、MIDlets を一時停止および再開するためのデスクトップキーボードのショートカットを定義できます。たとえば、DefaultColorPhone では、一時停止 (中断) に F6 キーを使用し、再開に F7 キーを使用します。
midlet.SUSPEND_ALL = VK_F6 midlet.RESUME_ALL = VK_F7
エミュレータスキンにタッチ画面があるかどうかは、次に示す 1 つのプロパティーによって決められます。
touch_screen=[true|false]
エミュレータスキンにタッチ画面がある場合は、ポインタイベントが Canvases に配信されます。
ロケールとは、同一の言語、習慣、あるいは文化的慣習などを共有する、特定の地理的領域や政治的領域、またはコミュニティーを指します。ソフトウェアでのロケールとは、ソフトウェアを特定の地理上の場所に適合させるのに必要となる各種情報を含んだ、ファイル、データ、およびコードの集合体を意味します。
一部の操作はロケールに依存するため、次のようなユーザーごとの情報に対してはロケールを特定する必要があります。
Sun Java Wireless Toolkit for CLDC エミュレータでは、プラットフォームのロケールによってデフォルトのロケールが決まります。
microedition.locale: ロケール名
ロケール名は、ハイフン (-) で区切られた 2 つの部分から構成されます。たとえば、en-US は、米国英語圏をロケールとして指定します。また、en-AU はオーストラリア英語圏を指定します。
最初の部分は指定可能な ISO 言語コードです。これらのコードは、ISO-639 で定義された 2 つの小文字のコードです。これらのコードの完全なリストについては、次のサイトを参照してください。
http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt
ロケール名の次の部分は指定可能な ISO 国コードです。これらのコードは、ISO-3166 で定義された 2 つの大文字のコードです。これらのコードの完全なリストについては、次のサイトを参照してください。
http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
CLDC の入力 API と出力 API では、指定された文字エンコーディングを使用して、8 ビット文字と 16 ビット Unicode 文字との間で変換が行われます。特定の MIDP の実装では、使用できるエンコーディングのセットを指定することがあります。
エミュレータでは、使用するプラットフォームのエンコーディングがデフォルトになります。UTF-8 や UTF-16 など、Java SE プラットフォームがサポートするほかのエンコーディングを使用することもできます。
エミュレータスキンが使用する文字エンコーディングを定義するには、次の定義を使用します。
microedition.encoding: エンコーディング
使用可能なすべてのエンコーディングセットを定義するには、次の定義を使用します。
microedition.encoding.supported: エンコーティングのリスト
microedition.encoding: UTF-8 microedition.encoding.supported: UTF-8, UTF-16, ISO-8859-1,ISO-8859-2, Shift_JIS
Java SE プラットフォームでサポートされているすべてのエンコーディングをサポートするには、次のように microedition.encoding.supported の定義を空白のままにします。
microedition.encoding.supported:
注 - ISO-8859-1 エンコーディングは、microedition.encoding.supported エントリで指定されているかどうかに関係なく、エミュレータで実行されるアプリケーションで常に使用可能になります。 |
Copyright© 2007, Sun Microsystems, Inc. All rights reserved.