Categories

วันศุกร์ที่ 10 กรกฎาคม พ.ศ. 2552

Creating Resource for Different Language and Hardware

ในโฟลเดอร์ 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 ... ]
    }
}

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Search