รองรับแพลตฟอร์มเวอร์ชันอื่น

แม้ว่า Android เวอร์ชันล่าสุดมักจะมี API ที่ยอดเยี่ยมสำหรับแอปของคุณ แต่คุณก็ควรสนับสนุน Android เวอร์ชันเก่าต่อไปจนกว่าอุปกรณ์จำนวนมากขึ้นจะได้รับการอัปเดต บทเรียนนี้จะแสดงวิธีใช้ประโยชน์จาก API ล่าสุดในขณะที่ยังคงรองรับเวอร์ชันเก่าด้วย

ใช้ตัวช่วยสร้างโปรเจ็กต์ใหม่ของ Android Studio เพื่อดูการกระจายอุปกรณ์ที่ใช้งานอยู่ ซึ่งใช้ Android แต่ละเวอร์ชัน การกระจายนี้อิงตามจำนวนอุปกรณ์ที่ เข้าชม Google Play Store โดยทั่วไป เราขอแนะนำให้รองรับอุปกรณ์ที่ใช้งานอยู่ประมาณ 90% ขณะที่ กำหนดเป้าหมายแอปเป็นเวอร์ชันล่าสุด

เคล็ดลับ: หากต้องการมอบฟีเจอร์และฟังก์ชันการทำงานที่ดีที่สุดใน Android หลายเวอร์ชัน คุณควรใช้ Android Support Library ในแอป ซึ่งจะช่วยให้คุณใช้ API ของแพลตฟอร์มล่าสุดหลายรายการในเวอร์ชันเก่าได้

ระบุระดับ API ขั้นต่ำและเป้าหมาย

ไฟล์ AndroidManifest.xml อธิบายรายละเอียดเกี่ยวกับแอปของคุณและ ระบุเวอร์ชันของ Android ที่รองรับ โดยเฉพาะอย่างยิ่ง แอตทริบิวต์ minSdkVersion และ targetSdkVersion สำหรับองค์ประกอบ <uses-sdk> จะระบุระดับ API ต่ำสุดที่แอปของคุณเข้ากันได้ และระดับ API สูงสุดที่คุณออกแบบและทดสอบแอป

เช่น

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

เมื่อมีการเปิดตัว Android เวอร์ชันใหม่ๆ สไตล์และลักษณะการทำงานบางอย่างอาจเปลี่ยนแปลงไป หากต้องการให้แอปใช้ประโยชน์จากการเปลี่ยนแปลงเหล่านี้และตรวจสอบว่าแอปเข้ากับสไตล์ของอุปกรณ์ของผู้ใช้แต่ละรายได้ คุณควรตั้งค่าtargetSdkVersion ให้ตรงกับ Android เวอร์ชันล่าสุดที่พร้อมใช้งาน

เนื่องจากเวอร์ชันรองของ SDK ไม่ได้เชื่อมโยงกับการเปลี่ยนแปลงลักษณะการทำงาน จึงไม่สามารถตั้งค่า targetSdkVersion ให้แสดงเวอร์ชันรองของ SDK ได้ หากต้องการเรียก API ใน SDK เวอร์ชันย่อยที่ใหม่กว่า minSdkVersion ให้ตรวจสอบเวอร์ชันระบบที่รันไทม์

ตรวจสอบเวอร์ชันของระบบที่รันไทม์

Android มีโค้ดที่ไม่ซ้ำกันสำหรับแต่ละเวอร์ชันของแพลตฟอร์มในBuild คลาสค่าคงที่ ใช้โค้ดเหล่านี้ภายในแอปเพื่อสร้างเงื่อนไขที่รับประกันว่าโค้ดที่ ขึ้นอยู่กับ API ระดับสูงกว่าจะทำงานเฉพาะเมื่อ API เหล่านั้นพร้อมใช้งานในระบบ

Kotlin

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}

Java

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

คุณใช้ Build.VERSION.SDK_INT_FULL เพื่อตรวจสอบว่ามี SDK เวอร์ชันหลักหรือเวอร์ชันย่อยหรือไม่

Kotlin

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor SDK release
}

Java

if (SDK_INT_FULL >= VERSION_CODES_FULL.[MAJOR or MINOR RELEASE]) {
  // Use APIs introduced in a major or minor SDK release
}

หมายเหตุ: เมื่อแยกวิเคราะห์ทรัพยากร XML ระบบ Android จะไม่สนใจแอตทริบิวต์ XML ที่อุปกรณ์ปัจจุบันไม่รองรับ คุณจึงใช้แอตทริบิวต์ XML ที่ รองรับเฉพาะในเวอร์ชันใหม่ได้อย่างปลอดภัยโดยไม่ต้องกังวลว่าเวอร์ชันเก่าจะใช้งานไม่ได้เมื่อ พบโค้ดดังกล่าว เช่น หากคุณตั้งค่า targetSdkVersion="11" แอปจะรวม ActionBar โดยค่าเริ่มต้น ใน Android 3.0 ขึ้นไป จากนั้นหากต้องการเพิ่มรายการในเมนูลงในแถบการดำเนินการ คุณต้องตั้งค่า android:showAsAction="ifRoom" ใน XML ของทรัพยากรเมนู การดำเนินการนี้ในไฟล์ XML ข้ามเวอร์ชันนั้นปลอดภัย เนื่องจาก Android เวอร์ชันเก่าจะเพียงแค่ไม่สนใจแอตทริบิวต์ showAsAction (กล่าวคือ คุณไม่จำเป็นต้องมีเวอร์ชันแยกต่างหากใน res/menu-v11/)

ใช้สไตล์และธีมของแพลตฟอร์ม

Android มีธีมประสบการณ์ของผู้ใช้ที่ทำให้แอปมีรูปลักษณ์ของระบบปฏิบัติการพื้นฐาน คุณใช้ธีมเหล่านี้กับแอปได้ภายใน ไฟล์ Manifest การใช้รูปแบบและธีมในตัวเหล่านี้จะช่วยให้แอปของคุณ ดูเป็นไปตามรูปลักษณ์และความรู้สึกของ Android เวอร์ชันล่าสุดอย่างเป็นธรรมชาติในแต่ละรุ่นใหม่

หากต้องการให้กิจกรรมของคุณดูเหมือนกล่องโต้ตอบ ให้ทำดังนี้

<activity android:theme="@android:style/Theme.Dialog">

วิธีทำให้กิจกรรมมีพื้นหลังโปร่งใส

<activity android:theme="@android:style/Theme.Translucent">

วิธีใช้ธีมที่กำหนดเองซึ่งกำหนดไว้ใน /res/values/styles.xml

<activity android:theme="@style/CustomTheme">

หากต้องการใช้ธีมกับทั้งแอป (กิจกรรมทั้งหมด) ให้เพิ่มandroid:theme แอตทริบิวต์ ลงในองค์ประกอบ <application> ดังนี้

<application android:theme="@style/CustomTheme">

ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและการใช้ธีมได้ในคำแนะนำเกี่ยวกับสไตล์และธีม