ในโฟลเดอร์ res/ สามารถกำหนดภาษา, สถานที่, ลักษณะของจอ ฯลฯ ได้โดย
สร้างโฟลเดอร์เพิ่ม เช่น
Project/
res/
values/
strings.xml
values-fr/
strings.xml
values-fr-rCA/
strings.xml
และสามารถปรับแต่ง resource ได้อีกหลายอย่าง คือ
- Language ใช้ISO 639-1 ที่เป็นตัวย่อ 2 ตัวอักษร เป็นตัวอักษรตัวเล็ก เช่น en, th
- Region ใช้ "r" ตัวเล็ก ตามด้วยตัวอักษรใหญ่ 2 ตัว ISO 3166-1-alpha-2 เช่น rUS, rGB
- Screen Orientation มี 3 อย่างคือ port (แนวตั้ง), land(แนวนอน), square(สี่เหลี่ยม)
- Screen Pixel Density pixel ต่อนิ้ว เช่น 92dpi, 108dpi
- Touchscreen Type มี nothouch, stylus, finger
- Keyboard Availability มี keysexposed, keyhidden
- Keyboard Input Type มี nokeys, qwerty, 12key
- UI Navigation Type มี notouch, dpad, trackball และ wheel
- Screen Resolution เช่น 320x240
หรือสามารถใส่หลายๆ ข้อจำกัดในโฟลเดอร์เดียวได้ คั่นด้วย hyphen แต่ต้องเรียงตามลำดับความสำคัญ เช่น
drawable-en-rUS
drawable-en-keyshidden
drawable-land-notouch-nokeys-320x240
ถ้าแบบนี้จะผิด
X drawable-rUS-en (ไม่เรียง)
X drawable-rUS-rUK (ซ้ำ)
Runtime Confi guration Changes
ปกติจะเปลี่ยน config พวกนี้ต้องปิดโปรแกรมแล้วเปิดใหม่ แต่ Android สามารถเปลี่ยน config พวกนี้ได้ในระหว่าง run time คือพอ user พลิกมือถือ หรือ เลื่อนคีย์บอร์ดออกมา ก็เปลี่ยนรูปแบบ แต่ต้องกำหนดไว้ใน manifest file โดยเพิ่ม android:configChange เข้าไป
สิ่งที่จะเปลี่ยนได้ก็คือ
- orientation แนวตั้ง แนวนอน
- keyboardHidden แสดงคีย์บอร์ดหรือซ่อน
- fontScale ขนาดฟอนท์
- locale ภาษา
- keyboard เช่น 12ปุ่มของโทรศัพท์เปลี่ยนเป็นคีย์บอร์ด
- touchscreen หรือ navigation ประเภทของ keyboard หรือ navigation
ตัวอย่างการประกาศใน manifest เพื่อ handle การเปลี่ยนแปลง screen orientation และ keyboard visibility
<activity name=".MyActivity"
label="@string/app_name"
configchanges="orientation|keyboard">
</activity>
พอมีการเปลี่ยนแปลง มันจะไปเรียก method ชื่อ onConfigurationChanged ใน Activity เราต้อง override method นี้ โดยรับ object ของ Configuration ที่จะบอกค่า configuration ใหม่มาให้ อย่าลืมเรียก super class และ เรียก resource ให้ครบ
@Override
public void onConfigurationChanged(Configuration _newConfig) {
super.onConfigurationChanged(_newConfig);
[ ... Update any UI based on resource values ... ]
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
[ ... React to different orientation ... ]
}
if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) {
[ ... React to changed keyboard visibility ... ]
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น