2


設定模擬器面板

這一章說明如何定義模擬器面板。您可以修改現有面板,或為模擬器建立新的面板。此程序稱為設定模擬器面板


2.1 面板特性檔

模擬器面板由一個特性檔定義。每個面板特性檔均位於 toolkit\wtklib\devices 下其自己的子目錄中,其中 toolkit 是 Sun Java Wireless Toolkit for CLDC 的安裝目錄。特性檔的名稱將與目錄名稱相符。

例如,DefaultColorPhone 面板由 toolkit\wtklib\devices\DefaultColorPhone 目錄中的 DefaultColorPhone.properties 定義。

面板特性檔會定義模擬器面板的外觀與運作方式。該檔案包含影像與聲音 (不一定儲存於相同目錄內) 指標。例如,DefaultColorPhone 目錄包含電話本身的影像,但 DefaultColorPhone 的圖示與聲音則在 wtklib\devices\Share 中定義。

這一章的其餘部分會描述面板特性檔的內容。特性檔是純文字檔。您可以用任何文字編輯器進行修改。一般而言,特性檔中項目的格式是一個特性名稱後面跟著一個值。名稱與值之間由冒號或等號分隔。以井字標記 (#) 開頭的行則是註解。

建立新面板時,最簡單的方式是複製現有的面板進行修改,例如:

1. 複製 DefaultColorPhone 目錄。

2. 以新面板的名稱做為新目錄的名稱。

3. 重新命名特性檔,以符合目錄名稱。

如果將目錄命名為 NewSkin,請將其特性檔重新命名為 NewSkin.properties


2.2 面板外觀

模擬器面板的整體外觀由許多因素決定,這一節將分別說明每一項因素:

2.2.1 面板影像

面板大部分的外觀由三個影像決定:

1. 預設影像會顯示裝置處於非作用中 (正常) 狀態。

2. 高亮度顯示影像會顯示裝置的所有按鈕都以高亮度顯示時的狀態,如同使用者將滑鼠移至按鈕上方。

3. 按下的影像則會顯示裝置的所有按鈕都已經按下時的狀態。

這些影像都顯示整個裝置。工具組使用這些影像的不同部分,來呈現高亮度顯示及按下的按鈕。

例如,圖 2-1 顯示 DefaultColorPhone 中的三個影像。

圖 2-1 DefaultColorPhone 的正常影像、高亮度顯示影像和按下按鈕時的影像

左側影像:模擬器無動作。中間影像:選取了中間按鈕。右側影像:按下了中間按鈕。

圖 2-2 中顯示每個小鍵盤的部分放大圖,可讓您看出三個影像的差異。

圖 2-2 模擬器面板的正常影像、高亮度顯示影像以及按下按鈕時的影像的詳細資訊

左側影像:模擬器無動作。中間影像:選取了中間按鈕。右側影像:按下了中間按鈕。

面板特性檔中以下列特性指定三個影像檔:

影像檔可以是 PNG、GIF 或 JPEG 格式,所有影像檔都要使用同樣尺寸。例如,DefaultColorPhone.properties 有下列幾個項目:

2.2.2 螢幕界限與可繪製區域

該螢幕代表實際裝置的顯示幕。它是由整體的螢幕界限、可繪製界限以及其他參數 (用以決定色彩數等因素) 來定義。

整體的螢幕界限是顯示幕的總面積。定義方式為從左上角影像檔原點 (0,0) 算起的長寬像素來計算。

圖 2-3 螢幕界限

螢幕座標的 x 表示寬度,y 表示高度。影像相對於左上角或 (0,0) 的位置放置。

特性檔中以下列方式定義螢幕界限:

例如:

大部分裝置不會讓 MIDP 應用程式使用全部的顯示區。螢幕的其餘部分通常保留供不同類型的圖示與指示器使用。同樣的,Sun Java Wireless Toolkit for CLDC 模擬器可讓您定義完整螢幕中,可供 MIDP 應用程式使用的子集,稱為可繪製區域。可繪製區域的原點以相對於顯示幕左上角的座標表示。例如,DefaultColorPhone 模擬器面板使用最上面一列顯示圖示,最底下一列顯示軟式標籤和其他圖示,如圖 2-4 所示。

圖 2-4 DefaultColorPhone 中的可繪製螢幕區域

預設彩色電話可繪製螢幕區域的寬度和高度。頂列和底列不可繪製。

在模擬器面板特性檔中,可繪製區域的表示方法如下。

請注意,x 和 y 座標依螢幕位置而定。並且 screenPaintableRegion 的寬度和高度值不得超出 screen.widthscreen.height 的相應值。

例如:



備註 - 全螢幕模式下 (MIDP 2.0 或更高版本中),模擬器使用的區域從可繪製區域原點開始,一直延伸到螢幕右下角。在 DefaultColorPhone 中,這是除了最上面一列以外的完整螢幕區域。



2.2.3 螢幕特性

模擬器面板特性檔決定螢幕支援的色彩數和像素縱橫比。iscolor 指定模擬器面板是使用彩色還是灰階。

2.2.3.1 isColor=[true|false]

指定 true 代表彩色,false 代表灰階。

2.2.3.2 colorCount=數值

colorCount 特性會指定可用的色彩數。對於灰階裝置則指定不同深淺的灰色數:

例如,DefaultColorPhone 具有 4096 色的彩色螢幕:

isColor=true
colorCount=0x1000

2.2.3.3 enableAlphaChannel=[true|false]

此選項決定模擬器的 alpha (透明度) 處理。

2.2.3.4 gamma=數值

此值決定 Gamma 系數的校正。1 的值表示不做錯誤校正。

2.2.3.5 screenDoubleBuffer=[true|false]

true 可啟用雙重緩衝,false 會將其停用。

2.2.3.6 screenBorderColor=色彩

screenBorderColor 指定螢幕可繪製區域以外的背景色彩。例如,DefaultColorPhone 使用下列色彩:

screenBorderColor=0xb6b6aa

2.2.3.7 screenBGColor=色彩

使用此特性可設定灰階裝置上螢幕的背景色彩。

2.2.4 圖示

Sun Java Wireless Toolkit for CLDC 模擬器支援使用圖示,也就是可向使用者傳達資訊的小影像。通常圖示位在顯示螢幕上之可繪製區域以外的位置。模擬器實作一組固定的圖示,您可以在表格 2-1 中看到說明。


表格 2-1 模擬器圖示

名稱

描述

battery

顯示電池狀態

domain

指示執行中 MIDlet 的保護網域

down

表示可以捲動

inmode

指示輸入模式:小寫、大寫、數字

internet

顯示網際網路活動

left

表示可以捲動

reception

顯示無線訊號強度

right

表示可以捲動

up

表示可以捲動


 

圖示的定義方式是利用位置 (從螢幕原點算起)、預設狀態以及對應到可能狀態的影像清單。例如,此處為 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 影像。

另一個有趣的範例是 inmode 圖示,它包含 7 個狀態,有 6 個對應的影像檔:

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

模擬器另一個類似圖示的部分在於網路指示器。網路指示器不是位在螢幕上,而是顯示在模擬器面板上。在 DefaultColorPhone 中,網路指示器顯示成模擬器面板左上角的小綠燈。網路指示器的定義使用兩個特性:

例如,在 DefaultColorPhone 中,網路指示器類似:

寬度與高度應該符合網路指示器影像的寬度與高度。

2.2.5 字型

模擬器所用的字型定義在面板特性檔中。基本上,您可以為 MIDP Font 類別中可用的每一種字體、樣式與大小各定義一種字型。格式如下:

font.face.style.size:字型指定元

您可以從 MIDP Font API 推測字體、樣式與大小參數,但是在模擬器面板特性檔中,識別碼是小寫。字體是 systemmonospaceproportional,樣式是 plainbolditalic,大小是 smallmediumlarge

字型指定元遵循 Java Platform, Standard Edition (Java SE) java.awt.Font 類別程式庫中規定的慣例。下列來自 DefaultColorPhone 的範例中定義了三種大小的比例斜體字型:

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

如果不使用系統字型,您還有一個其他選項,就是使用點陣字型。點陣字型只是當成字型的影像,影像中包含字元的形狀。點陣字型影像是單行文字,內容是其中每個字元的形狀。若要定義點陣字型,請使用下列特性:

font.name=字型特性檔

字型特性檔包含下列特性定義:

影像檔可以是 PNG、GIF 或 JPEG 格式。它必須包含列字元。圖 2-5 顯示了兩列,以便容易看到這些字元。

圖 2-5 點陣字型影像

此圖顯示了一串標點符號字元、大寫和小寫字母以及其他符號。

指定高度、上升高度、下降高度與行距時,都以像素為單位。如果您不熟悉這些字型術語,請參閱 Java SE 文件中的 java.awt.FontMetrics

字型特性檔還必須包含 ASCII 字元碼與影像中水平像素偏移量之間的對映清單。在下列範例中,ASCII 碼 65 對映到水平偏移量 124:

ascii_x-65=124

定義點陣字型後,它的名稱就可以做為字型指定元使用。

2.2.6 軟式按鈕標籤

軟式按鈕是沒有固定功能的按鈕。這一章以下部分會詳細介紹這類按鈕。軟式按鈕的標籤顯示在螢幕上。模擬器面板特性檔會決定軟式按鈕標籤的顯示位置與方式。

軟式按鈕標籤的字型是使用字型別名 (您為字型指定的簡稱) 來定義。每個軟式按鈕標籤均由一個特性來描述:

softbutton.n=x, y, width, height, font-alias, alignment

alignment 的有效值是 leftrightcenter

例如,下列特性會告訴工具組,軟式按鈕標籤要使用 Courier 12 號字型:

首先定義字型別名 softButton。第一個標籤靠左對齊,第二個標籤則靠右對齊。

2.2.7 聲音

MIDP 警示會有相關聯的聲音。在 Sun Java Wireless Toolkit for CLDC 模擬器中,聲音使用檔案來定義;MIDP AlertType 類別中列舉的每種類型各有一個檔案。模擬器可以使用基礎 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.3 對映使用者輸入

模擬器面板的說明分為兩部分。第一個部分是外觀,已在上文中說明。第二個部分則會定義如何將使用者輸入對映至模擬器中。

2.3.1 鍵盤處理程式

鍵盤處理程式會辨認使用者按下的按鈕,並在模擬器中執行適當的動作。例如,如果使用滑鼠按一個軟式按鈕,鍵盤處理程式就會負責在模擬器中執行適當的動作。

鍵盤處理程式會定義一組標準按鈕名稱,供您用於定義按鈕。您只須告訴模擬器,按鈕在面板上的位置,鍵盤處理程式就會處理其他工作。

Sun Java Wireless Toolkit for CLDC 模擬器包含兩個鍵盤處理程式,一個用於使用 ITU-T 小鍵盤的電話裝置 (DefaultKeyboardHandler),另一個用於使用全標準鍵盤的裝置。例如,DefaultColorPhone 包含以下鍵盤處理程式特性:

keyboard.handler = com.sun.kvem.midp.DefaultKeyboardHandler

DefaultKeyboardHandler 能夠辨識下列標準按鈕名稱:09POUNDASTERISKPOWERSENDENDLEFTRIGHTUPDOWNSELECTSOFT1SOFT2SOFT3SOFT4USER1USER10

QwertyDevice 中,鍵盤處理程式格式如下:

keyboard.handler = com.sun.kvem.midp.QwertyKeyboardHandler

QwertyKeyboardHandler 支援的按鈕與 DefaultKeyboardHandler 相同,而且也包含標準鍵盤上的按鈕,如字母鍵、Shift 與 Alt。

2.3.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

2.3.3 指定桌面鍵盤按鍵至按鈕

按鈕可以擁有一個或多個相關聯的桌面鍵盤按鍵。這表示您可以使用桌面鍵盤來控制模擬器,而不必將滑鼠移至裝置面板上,再按滑鼠按鈕。

例如,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 文件。

您可以視需要為按鈕指定多個桌面鍵盤按鍵。在以下取自 DefaultColorPhone 的範例中,桌面鍵盤上的按鍵 5 或數字鍵台按鍵 5 都定義為模擬器面板上按鈕 5 的捷徑:

key.5 = VK_5 VK_NUMPAD5

2.3.4 對映遊戲按鍵

遊戲動作已經在 DefaultKeyboardHandler 中定義,但您可以用 QwertyKeyboardHandler 指定您自己的遊戲動作。請使用此格式:

game.function = 按鈕名稱

function 可以是 LEFTRIGHTUPDOWNSELECT 其中之一。您可以在這一章前面的部分找到標準按鈕名稱的說明。

預設設定如下所示:

2.3.5 對映按鍵至字元

您可以使用 QwertyKeyboardHandler 定義按下按鈕會產生哪個字元,而且按鈕可以單獨按下,也可以與 Shift 或 Alt 鍵一起按下。

請使用此格式:

keyboard.handler.qwerty.button = 'base-character' 'shift-character' 'alternate-character'

base character 是此按鈕通常產生的字元,shift character 是同時按下 Shift 和此按鈕時所產生的字元,而 alternate character 則是同時按下 Alt 和此按鈕時所產生的字元。

您可以使用以下兩種方法模擬 Shift 或 Alt 與某按鈕同時按下的動作:

例如:

keyboard.handler.qwerty.A = 'a' 'A' '?'

2.3.6 對映指令至軟式按鈕

指令是 MIDP 規格的一部分。這種靈活的方式可指定使用者需要的動作,卻不需要要求特定裝置應該如何提供該功能。

一般而言,MIDP 裝置使用軟式按鈕來呼叫指令。指令文字會顯示在顯示幕上靠近軟式按鈕的位置。如果可用的指令多於可用的軟式按鈕,實作會將一個軟式按鈕標籤顯示為功能表。只要按下功能表軟式按鈕,就會顯示可用指令功能表。

Sun Java Wireless Toolkit for CLDC 模擬器可讓您指定要根據 javax.microedition.lcdui.Command 中指定的指令類型,來決定某些指令類型的顯示位置。例如,在有兩個軟式按鈕的模擬器面板上,您可能偏好讓 BACKEXIT 指令始終顯示在左邊軟式按鈕上,並讓 OK 指令顯示在右邊軟式按鈕上。

您可以使用下列格式,在模擬器面板特性檔中指定這些偏好類型:

command.keys.command-type=按鈕

例如,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

藉由指定其他按鈕名稱,您可以為特定指令類型指定其他偏好的按鈕。例如,這一行會告訴模擬器,如果可以,將 BACK 指令對映至 END,否則對映至 SOFT1

command.keys.BACK = END SOFT1

最後,您可以視需要,指定只用於特定指令類型的軟式按鈕。下列定義會限制僅可以將 BACKEXITCANCELSTOP 指令類型對映至 SOFT1 鍵。

command.exclusive.SOFT1 = BACK EXIT CANCEL STOP

2.3.7 指令功能表

如果可用的軟式按鈕少於指令,指令就會放置在功能表中。Sun Java Wireless Toolkit for CLDC 模擬器提供指令功能表的控制方式。您可以選擇用來顯示功能表的按鈕、用來在功能表項目中移動的按鈕,以及顯示功能表時所用的文字標籤。

下列取自 DefaultColorPhone 的特性,會告訴模擬器面板使用第二個軟式按鈕來顯示或隱藏功能表。

command.menu.activate = SOFT2

預設狀況下使用 UPDOWN 按鈕來移動功能表項目,並使用 SELECT 來選擇指令。您可以用下列特性變更這些指定方式:

2.3.8 暫停與重新繼續

MIDP 規格可讓應用程式 (MIDlet) 隨時暫停,例如接聽來電這類的其他電話事件。

您可以用模擬器面板特性檔來定義暫停與重新繼續 MIDlet 的桌面鍵盤捷徑。 例如,DefaultColorPhone 使用 F6 代表暫停,使用 F7 代表重新繼續:

midlet.SUSPEND_ALL = VK_F6
midlet.RESUME_ALL = VK_F7

2.3.9 指標事件

模擬器面板是否有觸控式螢幕由一個特性決定,如下所示:

touch_screen=[true|false]

如果模擬器面板具有觸控式螢幕,則指標事件會傳送至 Canvases


2.4 語言環境與字元編碼

語言環境是指具有相同語言、習俗或文化傳統的地理或政治區域或團體。在軟體中,語言環境是指包含必要資訊,使軟體適用於特定地區的檔案、資料與程式碼的集合。

有些作業僅能用於特定語言環境,需要指定的語言環境才能提供適合使用者的資訊,如下所示:

在 Sun Java Wireless Toolkit for CLDC 模擬器中,預設語言環境由平台的語言環境來決定。

若要定義特定語言環境,請使用以下定義:

microedition.locale:語言環境名稱

語言環境名稱由兩部分組成,以破折號 (-) 分隔,例如 en-US 是專為美國英語指定的語言環境,而 en-AU 則是專為澳洲英語指定的語言環境。

第一部分是有效的 ISO 語言碼。這些代碼依 ISO-639 規定,以小寫的二個字母表示。您可以在許多網站找到完整的代碼清單,例如
http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt

第二部分是有效的 ISO 國碼。這些代碼依 ISO-3166 規定,以大寫的二個字母表示。您可以在許多網站找到完整的代碼清單,例如:
http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html

CLDC 中的輸入與輸出 API 使用已命名的字元編碼,在 8 位元字元與 16 位元 Unicode 字元之間進行轉換。特定 MIDP 實作只提供一小組編碼供 MIDlet 使用。

在模擬器中,預設編碼是您正在執行的平台的預設編碼器。您的模擬器可以使用 Java SE 平台可用的其他編碼,例如 UTF-8 和 UTF-16。

若要定義模擬器面板使用的字元編碼,請使用下列定義:

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 項目中,一定可用於模擬裝置上執行的應用程式。