API ของ Android 3.0

ระดับ API: 11

สำหรับนักพัฒนาซอฟต์แวร์ แพลตฟอร์ม Android 3.0 (HONEYCOMB) เป็นแบบดาวน์โหลดได้ สำหรับ Android SDK แพลตฟอร์มที่ดาวน์โหลดได้ประกอบด้วยไลบรารีและระบบ Android รวมถึงชุดสกินโปรแกรมจำลองและอื่นๆ แพลตฟอร์มที่ดาวน์โหลดได้ไม่มีแพลตฟอร์มภายนอก ไลบรารี

สำหรับนักพัฒนาซอฟต์แวร์ แพลตฟอร์ม Android 3.0 มีให้บริการเป็น คอมโพเนนต์ที่ดาวน์โหลดได้สำหรับ Android SDK แพลตฟอร์มที่ดาวน์โหลดได้ประกอบด้วยคลัง Android และภาพระบบ รวมถึงชุดสกินโปรแกรมจำลองและอื่นๆ เพื่อเริ่มต้นพัฒนาหรือทดสอบ กับ Android 3.0 ใช้ Android SDK Manager เพื่อดาวน์โหลดแพลตฟอร์มนั้นลงใน SDK ของคุณ

ภาพรวมของ API

ส่วนต่างๆ ด้านล่างนี้จะให้ภาพรวมทางเทคนิคเกี่ยวกับสิ่งใหม่ๆ สำหรับนักพัฒนาแอปใน Android 3.0 ซึ่งรวมถึงฟีเจอร์ใหม่และการเปลี่ยนแปลงในเฟรมเวิร์ก API นับตั้งแต่เวอร์ชันก่อนหน้า

ส่วนย่อย

ส่วนย่อยคือองค์ประกอบเฟรมเวิร์กใหม่ ที่ช่วยให้คุณแยกองค์ประกอบที่แตกต่างกันของ กิจกรรมให้เป็นโมดูลแบบจบในตัวซึ่งกำหนด UI และวงจรของลูกค้าเอง หากต้องการสร้างส่วนย่อย คุณต้องขยายคลาส Fragment และใช้เมธอดการเรียกคืนเกี่ยวกับวงจรชีวิตของส่วนย่อยหลายรายการ ซึ่งคล้ายกับ Activity จากนั้นคุณสามารถรวม ในกิจกรรมเดียวเพื่อสร้าง UI แบบหลายช่อง ซึ่งแต่ละกิจกรรม แผงจะจัดการวงจรการใช้งานของตนเองและข้อมูลจากผู้ใช้

นอกจากนี้ คุณยังใช้ข้อมูลโค้ดที่แยกส่วนได้โดยไม่ต้องระบุ UI และใช้ข้อมูลโค้ดที่แยกส่วนเป็นเวิร์กเกอร์สําหรับกิจกรรมแทน เช่น เพื่อจัดการความคืบหน้าของการดาวน์โหลดที่เกิดขึ้นเฉพาะขณะที่กิจกรรมทํางานอยู่

นอกจากนี้

  • ข้อมูลโค้ดจะแยกต่างหากและคุณนํากลับมาใช้ใหม่ในหลายกิจกรรมได้
  • คุณจะเพิ่ม นำออก แทนที่ และทำให้ส่วนย่อยภายในกิจกรรมเคลื่อนไหวได้
  • คุณสามารถเพิ่มส่วนย่อยในแบ็กสแต็กที่มีการจัดการโดยกิจกรรม โดยคงสถานะ ส่วนย่อยเมื่อมีการเปลี่ยนแปลง และช่วยให้ผู้ใช้ย้อนกลับไปดูส่วนอื่นๆ รัฐ
  • การจัดให้มีเลย์เอาต์สำรองช่วยให้คุณผสมผสานและจับคู่ข้อมูลโค้ดได้ตามความเหมาะสมกับขนาดและการวางแนวหน้าจอ
  • Fragment มีสิทธิ์เข้าถึงกิจกรรมคอนเทนเนอร์ได้โดยตรงและร่วมส่งรายการไปยัง แถบการดำเนินการของกิจกรรม (กล่าวถึงในลำดับถัดไป)

หากต้องการจัดการ Fragment ในกิจกรรม คุณต้องใช้ FragmentManager ซึ่งมี API หลายรายการสำหรับการโต้ตอบกับ Fragment เช่น เป็นการค้นหาส่วนย่อยในกิจกรรม และนำส่วนย่อยออกจากกองหลังเพื่อคืนค่า สถานะก่อนหน้า

หากต้องการทำธุรกรรม เช่น เพิ่มหรือนำข้อมูลโค้ดออก คุณต้องสร้าง FragmentTransaction จากนั้นคุณจะโทรด้วยวิธีการต่างๆ เช่น add() remove() หรือ replace() ได้ เมื่อใช้ทั้งหมดแล้ว การเปลี่ยนแปลงที่ต้องการทําสําหรับธุรกรรม คุณต้องเรียกใช้ commit() และระบบจะใช้ธุรกรรมส่วนย่อยกับ กิจกรรมนั้น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Fragment ให้อ่านเอกสารFragment นอกจากนี้ ยังมีตัวอย่างมากมายในแอปพลิเคชันตัวอย่าง API ด้วย

แถบการดำเนินการ

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

  • เพิ่มรายการเมนูในแถบการทำงานโดยตรงเป็น "รายการการทำงาน"

    ในการประกาศ XML สำหรับรายการในเมนู ให้ระบุแอตทริบิวต์ android:showAsAction ที่มีค่า "ifRoom" เมื่อมีพื้นที่เพียงพอ รายการเมนูจะปรากฏในแถบการทำงานโดยตรง มิเช่นนั้น ระบบจะวางรายการไว้ในเมนูแบบเลื่อนลง ซึ่งจะแสดงโดยไอคอนเมนูทางด้านขวาของแถบการดำเนินการ

  • แทนที่รายการการทำงานด้วยวิดเจ็ต (เช่น ช่องค้นหา) ซึ่งเป็นการสร้าง "มุมมองการดำเนินการ"

    ในการประกาศ XML ของรายการในเมนู ให้เพิ่มแอตทริบิวต์ android:actionViewLayout ที่มีทรัพยากรเลย์เอาต์หรือแอตทริบิวต์ android:actionViewClass ที่มีชื่อคลาส วิดเจ็ต (คุณต้องประกาศแอตทริบิวต์ android:showAsAction ด้วยเพื่อให้สินค้าปรากฏ ในแถบการทำงาน) หากแถบการดำเนินการมีพื้นที่ไม่เพียงพอและรายการปรากฏในเมนูรายการเพิ่มเติม รายการดังกล่าวจะทำงานเหมือนรายการเมนูปกติและจะไม่แสดงวิดเจ็ต

  • เพิ่มการดำเนินการลงในโลโก้ของแอปพลิเคชันและแทนที่ด้วยโลโก้ที่กำหนดเอง

    ระบบจะกําหนดรหัส android.R.id.home ให้กับโลโก้แอปพลิเคชันโดยอัตโนมัติ ซึ่งจะส่งไปยังการเรียกกลับ onOptionsItemSelected() ของกิจกรรมเมื่อมีการแตะ เพียงตอบกลับรหัสนี้ใน Callback เพื่อดำเนินการบางอย่าง เช่น ไปที่ "หน้าแรก" ของแอปพลิเคชันของคุณ กิจกรรม

    หากต้องการแทนที่ไอคอนด้วยโลโก้ ให้ระบุโลโก้ของแอปพลิเคชันในไฟล์ Manifest ด้วยแอตทริบิวต์ android:logo แล้วเรียก setDisplayUseLogoEnabled(true) ในกิจกรรมของคุณ

  • เพิ่มเบรดครัมบ์เพื่อย้อนไปข้างหลังผ่านส่วนย่อยของแฟรกเมนต์ด้านหลัง
  • เพิ่มแท็บหรือรายการแบบเลื่อนลงเพื่อนำทางผ่านส่วนย่อย
  • ปรับแต่งแถบการดำเนินการด้วยธีมและพื้นหลัง

แถบการดำเนินการเป็นมาตรฐานสำหรับแอปพลิเคชันทั้งหมดที่ใช้ธีมโฮโลกราฟิกใหม่ ซึ่งเป็นมาตรฐานด้วยเมื่อคุณตั้งค่า android:minSdkVersion หรือ android:targetSdkVersion เป็น "11"

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

คลิปบอร์ดของระบบ

ตอนนี้แอปพลิเคชันสามารถคัดลอกและวางข้อมูล (นอกเหนือจากข้อความ) ไปยังและจากคลิปบอร์ดทั้งระบบได้แล้ว ข้อมูลที่ถูกตัดอาจเป็นข้อความธรรมดา URI หรือ Intent

การให้ระบบเข้าถึงข้อมูลที่ต้องการให้ผู้ใช้คัดลอกผ่านผู้ให้บริการเนื้อหา ผู้ใช้สามารถคัดลอกเนื้อหาที่ซับซ้อน (เช่น โครงสร้างรูปภาพหรือข้อมูล) จากแอปพลิเคชันของคุณ และ วางลงในแอปพลิเคชันอื่นที่สนับสนุนเนื้อหาประเภทนั้น

หากต้องการเริ่มใช้คลิปบอร์ด ให้รับออบเจ็กต์ ClipboardManager ระดับส่วนกลางโดยเรียกใช้ getSystemService(CLIPBOARD_SERVICE)

หากต้องการคัดลอกรายการไปยังคลิปบอร์ด คุณต้องสร้างออบเจ็กต์ ClipData ใหม่ ซึ่งเก็บออบเจ็กต์ ClipData.Item อย่างน้อย 1 รายการ โดยแต่ละรายการจะอธิบายเอนทิตีรายการเดียว วิธีสร้างออบเจ็กต์ ClipData ที่มี ClipData.Item เพียงรายการเดียว คุณสามารถใช้วิธีใดวิธีหนึ่งของ Helper เช่น newPlainText(), newUri() และ newIntent() ซึ่งแต่ละรายการจะแสดงออบเจ็กต์ ClipData ที่โหลดไว้ล่วงหน้าพร้อมด้วย ClipData.Item ที่คุณระบุ

หากต้องการเพิ่ม ClipData ลงในคลิปบอร์ด ให้ส่งผ่านไปยัง setPrimaryClip() สำหรับอินสแตนซ์ ClipboardManager

จากนั้นคุณสามารถอ่านไฟล์จากคลิปบอร์ด (เพื่อวาง) ได้โดยเรียกใช้ getPrimaryClip() บน ClipboardManager การจัดการClipDataที่คุณได้รับสามารถ อาจซับซ้อน และต้องแน่ใจว่าคุณสามารถจัดการประเภทข้อมูลที่อยู่ในคลิปบอร์ดได้ ก่อนที่จะวาง

คลิปบอร์ดจะเก็บข้อมูลที่ถูกตัดไว้เพียงรายการเดียว (ClipData ออบเจ็กต์) ในแต่ละครั้ง แต่ ClipData รายการหนึ่งอาจมี ClipData.Item หลายรายการ

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

ลากและวาง

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

การดำเนินการลากและวางมีวงจรที่กำหนดโดยการดำเนินการลากหลายรายการ ซึ่งแต่ละรายการ กำหนดโดยออบเจ็กต์ DragEvent เช่น ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED และ ACTION_DROP แต่ละมุมมองที่ต้องการมีส่วนร่วมในการลาก จะฟังการดำเนินการเหล่านี้ได้

หากต้องการเริ่มลากเนื้อหาในกิจกรรม ให้เรียกใช้ startDrag() ใน View โดยระบุออบเจ็กต์ ClipData ที่แสดงข้อมูลที่จะลาก View.DragShadowBuilder เพื่อช่วยสร้าง "เงา" ที่ผู้ใช้เห็นใต้นิ้วขณะลาก และ Object ที่สามารถแชร์ข้อมูลเกี่ยวกับออบเจ็กต์การลากกับมุมมองที่อาจรับออบเจ็กต์

หากต้องการยอมรับวัตถุที่ลากใน View (รับ "วาง") ให้ลงทะเบียนมุมมอง กับ OnDragListener โดยโทรไปที่ setOnDragListener() เมื่อเกิดเหตุการณ์การลากในมุมมอง ระบบจะเรียก onDrag() สำหรับ OnDragListener ซึ่งจะได้รับ DragEvent ที่อธิบายประเภทของการลากที่เกิดขึ้น (เช่น ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED และ ACTION_DROP) ในระหว่างการลาก ระบบจะเรียก onDrag() สำหรับมุมมองที่อยู่ภายใต้การลากซ้ำๆ เพื่อส่งสตรีมเหตุการณ์การลาก ฝ่ายรับข้อมูลสามารถสอบถามประเภทกิจกรรมที่ส่งไปยัง onDragEvent() โดยโทรหา getAction() ใน DragEvent

หมายเหตุ: แม้ว่าเหตุการณ์การลากอาจมีออบเจ็กต์ ClipData อยู่ แต่สิ่งนี้ไม่เกี่ยวข้องกับคลิปบอร์ดของระบบ ลากและวาง ไม่ควรวางข้อมูลที่ลากลงในคลิปบอร์ดของระบบ

อ่านข้อมูลเพิ่มเติมได้ในเอกสารประกอบเรื่องการลากและวาง นอกจากนี้ คุณยังดูการใช้งานการลากและวางในแอปพลิเคชันตัวอย่าง API และแอปพลิเคชัน Honeycomb Gallery ได้อีกด้วย

วิดเจ็ตแอป

Android 3.0 รองรับคลาสวิดเจ็ตใหม่หลายคลาสสำหรับวิดเจ็ตแอปแบบอินเทอร์แอกทีฟมากขึ้นในหน้าจอหลักของผู้ใช้ ซึ่งได้แก่ GridView, ListView, StackView, ViewFlipper และ AdapterViewFlipper

และที่สำคัญ คุณสามารถใช้ RemoteViewsService ใหม่เพื่อสร้างวิดเจ็ตแอปที่มีคอลเล็กชันได้โดยใช้วิดเจ็ต เช่น GridView, ListView และ StackView ที่สำรองข้อมูลระยะไกล เช่น จากผู้ให้บริการเนื้อหา

นอกจากนี้ คลาส AppWidgetProviderInfo (ที่กําหนดใน XML ด้วยองค์ประกอบ <appwidget-provider>) ยังรองรับฟิลด์ใหม่ 2 รายการ ได้แก่ autoAdvanceViewId และ previewImage ช่อง autoAdvanceViewId จะช่วยให้คุณระบุรหัสข้อมูลพร็อพเพอร์ตี้ของ มุมมองย่อยของวิดเจ็ตแอปที่ควรตั้งค่าขั้นสูงอัตโนมัติโดยโฮสต์ของวิดเจ็ตแอป ฟิลด์ previewImage จะระบุหน้าตัวอย่างว่า วิดเจ็ตของแอปจะมีลักษณะเหมือนและแสดงให้ผู้ใช้เห็นจากเครื่องมือเลือกวิดเจ็ต หากช่องนี้ไม่ใช่ ที่มีให้ ไอคอนของวิดเจ็ตแอปจะใช้ในการแสดงตัวอย่าง

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

คุณสามารถดูการใช้งานฟีเจอร์วิดเจ็ตแอปใหม่ได้ในวิดเจ็ตแอปสแต็กและวิดเจ็ตรายการสภาพอากาศ แอปพลิเคชัน

การแจ้งเตือนในแถบสถานะ

เราได้ขยาย API ของ Notification เพื่อรองรับสถานะที่มีเนื้อหาสมบูรณ์มากขึ้น การแจ้งเตือนในแถบ รวมถึงคลาส Notification.Builder ใหม่จะช่วยให้คุณ สร้างออบเจ็กต์ Notification รายการ

ฟีเจอร์ใหม่มีดังนี้

  • รองรับไอคอนขนาดใหญ่ในการแจ้งเตือน โดยใช้ setLargeIcon() ซึ่งมักจะเป็น แอปพลิเคชันโซเชียลต่างๆ เพื่อแสดงภาพถ่ายการติดต่อของผู้ที่เป็นแหล่งที่มาของ หรือกำหนดให้แอปสื่อแสดงภาพขนาดย่อของอัลบั้ม
  • รองรับเลย์เอาต์ที่กำหนดเองในแถบสถานะโดยใช้ setTicker()
  • รองรับเลย์เอาต์การแจ้งเตือนที่กำหนดเองเพื่อใส่ปุ่มที่มี PendingIntent เพื่อให้วิดเจ็ตการแจ้งเตือนโต้ตอบได้มากขึ้น เช่น การแจ้งเตือนสามารถควบคุมการเล่นเพลงได้โดยไม่ต้องเริ่มกิจกรรม

ตัวโหลดเนื้อหา

API เฟรมเวิร์กใหม่ช่วยให้การโหลดข้อมูลแบบไม่พร้อมกันโดยใช้คลาส Loader เป็นไปอย่างสะดวก คุณสามารถใช้ร่วมกับคอมโพเนนต์ UI เช่น มุมมองและข้อมูลโค้ดเพื่อโหลดข้อมูลจากเธรดผู้ทํางานแบบไดนามิก CursorLoader คลาสย่อยได้รับการออกแบบมาเป็นพิเศษเพื่อช่วยให้คุณดำเนินการดังกล่าวสำหรับข้อมูลที่ได้จาก ContentProvider

ทั้งหมดที่คุณต้องทำคือใช้อินเทอร์เฟซ LoaderCallbacks เพื่อรับ Callback เมื่อมีการขอตัวโหลดใหม่หรือข้อมูล จากนั้นเรียก initLoader() เพื่อเริ่มต้น ตัวโหลดสำหรับกิจกรรมหรือส่วนย่อยของคุณ

อ่านข้อมูลเพิ่มเติมได้ที่เอกสารตัวโหลด นอกจากนี้ คุณยังดู โค้ดตัวอย่างที่ใช้ตัวโหลดใน LoaderCursor และ ตัวอย่าง LoaderThrottle

Bluetooth A2DP และชุดหูฟัง API

ตอนนี้ Android มี API สําหรับแอปพลิเคชันเพื่อยืนยันสถานะของอุปกรณ์โปรไฟล์ A2DP และอุปกรณ์โปรไฟล์หูฟังบลูทูธที่เชื่อมต่ออยู่ เช่น แอปพลิเคชันสามารถระบุได้ว่ามีการเชื่อมต่อชุดหูฟังบลูทูธเพื่อฟังเพลงอยู่หรือไม่ และแจ้งให้ผู้ใช้ทราบตามความเหมาะสม แอปพลิเคชันยังรับการออกอากาศสำหรับคำสั่ง AT ที่เฉพาะเจาะจงของผู้ให้บริการและแจ้งให้ผู้ใช้ทราบเกี่ยวกับสถานะของอุปกรณ์ที่เชื่อมต่อ เช่น เมื่อแบตเตอรี่ของอุปกรณ์ที่เชื่อมต่อเหลือน้อย

คุณสามารถเริ่มต้น BluetoothProfile ที่เกี่ยวข้องโดยเรียก getProfileProxy() ด้วย A2DP หรือ HEADSET ค่าคงที่โปรไฟล์และ BluetoothProfile.ServiceListener ที่จะได้รับ Callback เมื่อมีการเชื่อมต่อหรือตัดการเชื่อมต่อไคลเอ็นต์บลูทูธ

เฟรมเวิร์กของภาพเคลื่อนไหว

เฟรมเวิร์กภาพเคลื่อนไหวที่ยืดหยุ่นใหม่ทั้งหมดให้คุณสร้างภาพเคลื่อนไหวคุณสมบัติที่กำหนดเองของออบเจ็กต์ใดก็ได้ (มุมมอง, ถอนออกได้, ส่วนย่อย, วัตถุ หรืออื่นๆ) ซึ่งช่วยให้คุณกําหนดลักษณะหลายด้านของภาพเคลื่อนไหวได้ เช่น

  • ระยะเวลา
  • จำนวนและลักษณะการทำงานซ้ำ
  • ประเภทการประมาณค่าเวลา
  • การตั้งค่าภาพเคลื่อนไหวให้เล่นพร้อมกัน ตามลำดับ หรือหลังจากเวลาหน่วงที่ระบุ
  • ความล่าช้าในการรีเฟรชเฟรม

คุณกําหนดแง่มุมภาพเคลื่อนไหวเหล่านี้และอื่นๆ สําหรับค่าสี int, float และฐาน 16 ของออบเจ็กต์ได้โดยค่าเริ่มต้น กล่าวคือ เมื่อออบเจ็กต์มีช่องพร็อพเพอร์ตี้สำหรับ 1 ในประเภทต่อไปนี้ สามารถเปลี่ยนค่าเมื่อเวลาผ่านไปเพื่อให้ส่งผลต่อภาพเคลื่อนไหว หากต้องการแสดงค่าประเภทอื่นๆ เป็นภาพเคลื่อนไหว คุณต้องบอกระบบวิธีคํานวณค่าสําหรับประเภทนั้นๆ โดยใช้อินเทอร์เฟซ TypeEvaluator

มีตัวสร้างภาพเคลื่อนไหว 2 แบบที่คุณสามารถใช้เพื่อให้ค่าของพร็อพเพอร์ตี้เคลื่อนไหวได้ ได้แก่ ValueAnimator และ ObjectAnimator ValueAnimator จะคํานวณค่าภาพเคลื่อนไหว แต่ไม่ทราบว่าออบเจ็กต์หรือพร็อพเพอร์ตี้ใดที่เคลื่อนไหว เครื่องมือนี้เพียงแค่ทําการคํานวณ และคุณต้องคอยฟังการอัปเดตและประมวลผลข้อมูลด้วยตรรกะของคุณเอง ObjectAnimator เป็นคลาสย่อยของ ValueAnimator และช่วยให้คุณตั้งค่าออบเจ็กต์และพร็อพเพอร์ตี้ให้เคลื่อนไหวได้ รวมถึงจัดการงานภาพเคลื่อนไหวทั้งหมด กล่าวคือ คุณต้องระบุวัตถุที่จะให้เคลื่อนไหวให้กับ ObjectAnimator, ระบุคุณสมบัติของวัตถุที่จะเปลี่ยนแปลงเมื่อเวลาผ่านไป และชุดค่าที่จะใช้กับคุณสมบัติเมื่อเวลาผ่านไป จากนั้นจึงเริ่มภาพเคลื่อนไหว

นอกจากนี้ คลาส LayoutTransition ยังเปิดใช้การเปลี่ยนอัตโนมัติ ภาพเคลื่อนไหวของการเปลี่ยนแปลง ที่คุณทำกับเลย์เอาต์กิจกรรม หากต้องการเปิดใช้การเปลี่ยนสำหรับบางส่วนของ สร้างออบเจ็กต์ LayoutTransition และตั้งค่า ViewGroup ใดก็ได้โดยโทรหา setLayoutTransition() ซึ่งจะทำให้ภาพเคลื่อนไหวเริ่มต้นทำงานทุกครั้งที่มีการเพิ่มหรือนำรายการออกจากกลุ่ม เพื่อระบุที่กำหนดเอง ภาพเคลื่อนไหว, โทรหา setAnimator() ใน LayoutTransition และระบุ Animator ที่กำหนดเอง เช่น ValueAnimator หรือ ObjectAnimator ที่กล่าวถึงข้างต้น

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

เฟรมเวิร์ก UI เพิ่มเติม

  • การเลือกหลายตัวเลือกสำหรับ ListView และ GridView

    โหมด CHOICE_MODE_MULTIPLE_MODAL ใหม่สําหรับ setChoiceMode() ช่วยให้ผู้ใช้เลือกรายการได้หลายรายการจาก ListView หรือ GridView เมื่อใช้ร่วมกับแถบการดำเนินการ ผู้ใช้สามารถเลือกหลายรายการ แล้วเลือกการดำเนินการที่จะทำจากรายการตัวเลือกในแถบการดำเนินการ (ซึ่งเปลี่ยนรูปแบบเป็นโหมดการดำเนินการแบบหลายตัวเลือก)

    หากต้องการเปิดใช้ตัวเลือกแบบหลายตัวเลือก โปรดโทรหา setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) และลงทะเบียน MultiChoiceModeListenerด้วย setMultiChoiceModeListener()

    เมื่อผู้ใช้กดค้างที่รายการ แถบการทำงานจะเปลี่ยนเป็นหลายตัวเลือก โหมดการทำงาน ระบบจะแจ้ง MultiChoiceModeListener เมื่อมีการเลือกรายการด้วยการเรียกใช้ onItemCheckedStateChanged()

    ดูตัวอย่างการเลือกแบบหลายตัวเลือกได้ที่ List15. Java ในแอปพลิเคชันตัวอย่าง API นี้

  • API ใหม่ๆ สำหรับเปลี่ยนรูปแบบมุมมอง

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

    วิธีการใหม่ๆ ในการตั้งค่าพร็อพเพอร์ตี้ข้อมูลพร็อพเพอร์ตี้ ได้แก่ setAlpha(), setBottom(), setLeft(), setRight(), setBottom(), setPivotX(), setPivotY(), setRotationX(), setRotationY(), setScaleX(), setScaleY(), setAlpha() และอื่นๆ

    บางวิธีการจะมีแอตทริบิวต์ XML ที่เกี่ยวข้องซึ่งคุณระบุในเลย์เอาต์ได้ เพื่อใช้การเปลี่ยนรูปแบบเริ่มต้น แอตทริบิวต์ที่ใช้ได้มีดังนี้ translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotY และ alpha

    การใช้พร็อพเพอร์ตี้มุมมองใหม่เหล่านี้ร่วมกับเฟรมเวิร์กภาพเคลื่อนไหวใหม่ (ตามที่อธิบายไว้ข้างต้น) จะช่วยให้คุณใช้ภาพเคลื่อนไหวที่ดูน่าสนใจกับมุมมองได้อย่างง่ายดาย เช่น หากต้องการหมุน มุมมองบนแกน Y ระบุ ObjectAnimator ด้วย View ซึ่งก็คือ "การหมุนY" พร็อพเพอร์ตี้ และค่าเริ่มต้นและสิ้นสุดดังนี้

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
  • ธีมโฮโลแกรมใหม่

    วิดเจ็ตระบบมาตรฐานและรูปลักษณ์โดยรวมได้รับการออกแบบใหม่และใช้ธีมอินเทอร์เฟซผู้ใช้แบบ "โฮโลกราฟิก" ใหม่ ระบบจะใช้ธีมใหม่ โดยใช้ระบบรูปแบบและธีมมาตรฐาน

    แอปพลิเคชันที่กำหนดเป้าหมายเป็นแพลตฟอร์ม Android 3.0 โดยการตั้งค่าค่า android:minSdkVersion หรือ android:targetSdkVersion เป็น "11" จะรับธีมโฮโลกราฟิกโดยค่าเริ่มต้น อย่างไรก็ตาม หากแอปพลิเคชันของคุณใช้ธีมของตัวเองด้วย ธีมของคุณจะแทนที่ ธีมโฮโลกราฟิก เว้นแต่คุณจะอัปเดตสไตล์เพื่อรับธีมโฮโลกราฟิก

    หากต้องการใช้ธีมโฮโลกราฟิกกับกิจกรรมแต่ละรายการหรือรับค่าธีมนั้นไว้ในคําจํากัดความธีมของคุณเอง ให้ใช้Theme.Holoธีมใหม่อย่างใดอย่างหนึ่ง หากแอปพลิเคชันของคุณเข้ากันได้กับ Android เวอร์ชันต่ำกว่า 3.0 และใช้ธีมที่กำหนดเอง คุณควรเลือกธีมตามเวอร์ชันแพลตฟอร์ม

  • วิดเจ็ตใหม่
    • AdapterViewAnimator

      คลาสพื้นฐานสำหรับ AdapterView ที่แสดงภาพเคลื่อนไหวเมื่อสลับ ระหว่างมุมมอง

    • AdapterViewFlipper

      ViewAnimator แบบง่ายที่เคลื่อนไหวระหว่างมุมมอง 2 รายการขึ้นไปที่มี เพิ่มแล้ว ระบบจะแสดงรายการย่อยรายการเดียวในแต่ละครั้ง หากมีการร้องขอ อุปกรณ์จะสลับไปมาระหว่างบุตรหลานแต่ละคนโดยอัตโนมัติเป็นระยะๆ

    • CalendarView

      อนุญาตให้ผู้ใช้เลือกวันที่จากปฏิทินโดยการแตะวันที่ และสามารถเลื่อนหรือปัดปฏิทินไปยังวันที่ที่ต้องการ คุณกำหนดค่าช่วงวันที่ที่มีอยู่ในวิดเจ็ตได้

    • ListPopupWindow

      เชื่อมโยงตัวเองไปยังมุมมองโฮสต์และแสดงรายการตัวเลือก เช่น สำหรับรายการตัวเลือก คำแนะนำเมื่อพิมพ์ในมุมมอง EditText

    • NumberPicker

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

    • PopupMenu

      แสดง Menu ในหน้าต่างป๊อปอัปแบบโมดัลที่ตรึงอยู่กับมุมมอง ป๊อปอัปจะปรากฏใต้มุมมองขององค์ประกอบหลักหากมีพื้นที่ หรือเหนือมุมมองหากไม่มีพื้นที่ หาก IME (Soft แป้นพิมพ์) จะปรากฏขึ้น ป๊อปอัปจะไม่ซ้อนทับ IME จนกว่าผู้ใช้จะแตะ เมนู

    • SearchView

      มีช่องค้นหาที่คุณสามารถกำหนดค่าให้ส่งคำค้นหาไปยัง URL ที่ระบุ กิจกรรมและแสดงการแนะนำการค้นหา (ในลักษณะเดียวกับกล่องโต้ตอบการค้นหาแบบเดิม) วิดเจ็ตนี้มีประโยชน์อย่างยิ่งสำหรับการแสดงวิดเจ็ตการค้นหาในแถบการดำเนินการ สำหรับข้อมูลเพิ่มเติม ดูการสร้างอินเทอร์เฟซการค้นหา

    • StackView

      มุมมองที่แสดงรายการย่อยในกอง 3 มิติและอนุญาตให้ผู้ใช้ปัดผ่านมุมมองต่างๆ ได้เหมือนสมุดภาพ

กราฟิก

  • กราฟิก 2 มิติที่มีการเร่งฮาร์ดแวร์

    ตอนนี้คุณเปิดใช้โปรแกรมแสดงผล OpenGL สําหรับแอปพลิเคชันได้แล้วโดยการตั้งค่า android:hardwareAccelerated="true" ในองค์ประกอบ <application> ขององค์ประกอบไฟล์ Manifest หรือสําหรับองค์ประกอบ <activity> แต่ละรายการ

    ธงนี้จะช่วยให้แอปพลิเคชันวาดได้เร็วขึ้น ซึ่งจะทําให้ภาพเคลื่อนไหวลื่นไหลขึ้น การเลื่อนที่ราบรื่นขึ้น รวมถึงประสิทธิภาพโดยรวมและการตอบสนองต่อการโต้ตอบของผู้ใช้ที่ดีขึ้น

  • ดูการรองรับเลเยอร์ฮาร์ดแวร์และซอฟต์แวร์

    โดยค่าเริ่มต้น View จะไม่ระบุเลเยอร์ไว้ คุณสามารถระบุให้ สำรองข้อมูลด้วยเลเยอร์ฮาร์ดแวร์หรือซอฟต์แวร์ ซึ่งระบุด้วยค่า LAYER_TYPE_HARDWARE และ LAYER_TYPE_SOFTWARE โดยใช้ setLayerType() หรือ layerType

    เลเยอร์ฮาร์ดแวร์ได้รับการสนับสนุนโดยพื้นผิวเฉพาะฮาร์ดแวร์ (โดยทั่วไปคือออบเจ็กต์เฟรมบัฟเฟอร์หรือ FBO ในฮาร์ดแวร์ OpenGL) และทำให้ระบบแสดงผลมุมมองโดยใช้ไปป์ไลน์การแสดงผลฮาร์ดแวร์ของ Android เฉพาะในกรณีที่เปิดการเร่งฮาร์ดแวร์สำหรับลําดับชั้นมุมมองเท่านั้น เมื่อต้องใช้ฮาร์ดแวร์ การเร่งความเร็วปิดอยู่ เลเยอร์ฮาร์ดแวร์จะทำงานเหมือนกับเลเยอร์ซอฟต์แวร์ทุกประการ

    เลเยอร์ซอฟต์แวร์มีการสนับสนุนด้วยบิตแมป และทำให้มุมมองถูกแสดงผลโดยใช้ ไปป์ไลน์การแสดงผลซอฟต์แวร์ แม้ว่าจะเปิดการเร่งฮาร์ดแวร์ไว้ก็ตาม คุณควรหลีกเลี่ยงเลเยอร์ซอฟต์แวร์เมื่อทรีมุมมองที่ได้รับผลกระทบอัปเดตบ่อยครั้ง การอัปเดตทุกครั้งจะต้องแสดงผลฟิลด์ เลเยอร์ซอฟต์แวร์ซึ่งอาจทำงานช้าได้

    ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับ LAYER_TYPE_HARDWARE และ LAYER_TYPE_SOFTWARE

  • เครื่องมือกราฟิก 3D ของ Renderscript

    Renderscript เป็นเฟรมเวิร์ก 3 มิติรันไทม์ที่ให้บริการทั้ง API สำหรับการสร้างฉาก 3 มิติ รวมถึงภาษาเชดเดอร์พิเศษที่ไม่ขึ้นอยู่กับแพลตฟอร์มเพื่อให้ได้ประสิทธิภาพสูงสุด เมื่อใช้ Renderscript สามารถเร่งการดำเนินการด้านกราฟิกและการประมวลผลข้อมูล Renderscript เป็นวิธีที่เหมาะสมในการสร้าง เอฟเฟ็กต์ 3 มิติประสิทธิภาพสูงสำหรับแอปพลิเคชัน วอลเปเปอร์ ภาพหมุน และอื่นๆ

    สำหรับข้อมูลเพิ่มเติม ดูที่ การแสดงผลและการคำนวณ 3 มิติด้วย Renderscript

สื่อ

  • วิดีโอไทม์แลปส์

    ตอนนี้ Camcorder API รองรับความสามารถในการบันทึกวิดีโอไทม์แลปส์แล้ว setCaptureRate() จะกำหนดอัตราในการจับเฟรม

  • การรองรับพื้นผิวสำหรับสตรีมรูปภาพ

    SurfaceTexture ใหม่ช่วยให้คุณจับภาพสตรีมรูปภาพเป็นพื้นผิว OpenGL ES ได้ การเรียกใช้ setPreviewTexture() สำหรับCamera อินสแตนซ์จะกำหนด SurfaceTexture สำหรับวาดการเล่นวิดีโอหรือแสดงตัวอย่างเฟรมจากกล้อง

  • HTTP Live Streaming

    ตอนนี้แอปพลิเคชันสามารถส่ง URL ของเพลย์ลิสต์ M3U ไปยังเฟรมเวิร์กสื่อเพื่อเริ่มเซสชันสตรีมมิงแบบสดผ่าน HTTP ได้แล้ว เฟรมเวิร์กสื่อรองรับข้อกำหนดส่วนใหญ่ของสตรีมมิงแบบสดผ่าน HTTP รวมถึงอัตราบิตแบบปรับเปลี่ยนได้ ดูข้อมูลเพิ่มเติมได้ในเอกสารรูปแบบสื่อที่รองรับ

  • ข้อมูล EXIF

    ExifInterface มีช่องใหม่สำหรับรูรับแสง, ISO และการรับแสงของรูปภาพ

  • โปรไฟล์กล้องวิดีโอ

    เมธอด hasProfile() ใหม่และหลายวิดีโอ โปรไฟล์คุณภาพ (เช่น QUALITY_1080P, QUALITY_720P, QUALITY_CIF และอื่นๆ) ช่วยให้คุณสามารถระบุกล้องวิดีโอได้ ตัวเลือกคุณภาพ

  • การโอนไฟล์สื่อดิจิทัล

    แพลตฟอร์มนี้รองรับ Media/Picture Transfer Protocol (MTP/PTP) ผ่าน USB ในตัว ซึ่งช่วยให้ผู้ใช้โอนไฟล์สื่อทุกประเภทระหว่างอุปกรณ์และไปยังคอมพิวเตอร์โฮสต์ได้อย่างง่ายดาย นักพัฒนาแอปสามารถสร้างจากการสนับสนุนนี้ โดยสร้างแอปพลิเคชันที่ช่วยให้ผู้ใช้สร้างหรือจัดการริชมีเดียได้ ไฟล์สื่อที่ผู้ใช้อาจต้องการโอนหรือแชร์ข้ามอุปกรณ์

  • การจัดการสิทธิ์ดิจิทัล (DRM)

    เฟรมเวิร์กการจัดการสิทธิ์ดิจิทัล (DRM) ที่ขยายได้สำหรับการตรวจสอบและบังคับใช้ดิจิทัล สิทธิ์ ซึ่งติดตั้งใช้งานใน 2 เลเยอร์สถาปัตยกรรม ได้แก่

    • API เฟรมเวิร์ก DRM ซึ่งแสดงแก่แอปพลิเคชันและเรียกใช้ผ่าน Dalvik VM สำหรับ แอปพลิเคชันมาตรฐานต่างๆ
    • ตัวจัดการ DRM ของโค้ดแบบเนทีฟที่ใช้ API เฟรมเวิร์กและแสดงอินเทอร์เฟซสำหรับ DRM ของปลั๊กอินสำหรับจัดการการจัดการสิทธิ์และการถอดรหัสสำหรับแผน DRM ต่างๆ

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

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

    รุ่นตัวอย่างไม่มีปลั๊กอิน DRM แบบเนทีฟสำหรับตรวจสอบและบังคับใช้ดิจิทัล สิทธิ์ อย่างไรก็ตาม ผู้ผลิตอุปกรณ์สามารถจัดส่งปลั๊กอิน DRM ไปพร้อมกับอุปกรณ์ของตนได้

    คุณดู DRM API ทั้งหมดได้ในแพ็กเกจ android.drm

รองรับแป้นพิมพ์

  • รองรับแป้นกดร่วม Control, Meta, Caps Lock, Num Lock และ Scroll Lock ดูข้อมูลเพิ่มเติมได้ที่META_CTRL_ONและช่องที่เกี่ยวข้อง
  • รองรับแป้นพิมพ์สไตล์เดสก์ท็อปแบบเต็ม รวมถึงรองรับแป้นต่างๆ เช่น Escape, Home, End, Delete และอื่นๆ คุณระบุได้ว่าเหตุการณ์สําคัญมาจากแป้นพิมพ์แบบเต็มหรือไม่โดยทำดังนี้ กำลังค้นหา getKeyboardType() และตรวจสอบ KeyCharacterMap.FULL
  • ตอนนี้ TextView รองรับการตัด คัดลอก วาง และเลือกทั้งหมดจากแป้นพิมพ์แล้ว โดยใช้แป้นพิมพ์ลัด Control+X, Control+C, Control+V และ Control+A และยังรองรับ PageUp/PageDown, Home/End และ การเลือกข้อความตามแป้นพิมพ์
  • KeyEvent เพิ่มวิธีการใหม่ๆ หลายวิธีเพื่อให้ตรวจสอบคีย์ได้ง่ายขึ้น สถานะของตัวปรับแต่งอย่างถูกต้องและสอดคล้องกัน ดู hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers()
  • แอปพลิเคชันสามารถใช้แป้นพิมพ์ลัดที่กำหนดเองโดยการจัดประเภทย่อย Activity, Dialog หรือ View และใช้งาน onKeyShortcut() เฟรมเวิร์กจะเรียกใช้เมธอดนี้ทุกครั้งที่มีการใช้แป้นร่วมกับแป้นควบคุม เมื่อสร้างเมนูตัวเลือก คุณจะลงทะเบียนแป้นพิมพ์ได้ โดยการตั้งค่าแอตทริบิวต์ android:alphabeticShortcut หรือ android:numericShortcut สำหรับ <item> แต่ละรายการ องค์ประกอบ (หรือ setShortcut())
  • Android 3.0 มีอุปกรณ์ "แป้นพิมพ์เสมือน" ใหม่ที่มีรหัส KeyCharacterMap.VIRTUAL_KEYBOARD เทคโนโลยี แป้นพิมพ์มีคีย์แมป US แบบเดสก์ท็อปซึ่งมีประโยชน์ในการสังเคราะห์เหตุการณ์สําคัญเพื่อการทดสอบ อินพุต

กิจกรรม Split Touch

ก่อนหน้านี้มีเพียงมุมมองเดียวเท่านั้นที่ยอมรับเหตุการณ์การสัมผัสได้พร้อมกัน Android 3.0 เพิ่มการรองรับการแยกเหตุการณ์การแตะในมุมมองต่างๆ และแม้แต่ในหน้าต่างต่างๆ เพื่อให้มุมมองต่างๆ ยอมรับเหตุการณ์การแตะพร้อมกันได้

ระบบจะเปิดใช้เหตุการณ์การแตะแบบแยกไว้โดยค่าเริ่มต้นเมื่อแอปพลิเคชันกำหนดเป้าหมายเป็น Android 3.0 กล่าวคือ เมื่อแอปพลิเคชันตั้งค่า android:minSdkVersion แล้ว หรือ android:targetSdkVersion ให้เป็น "11"

อย่างไรก็ตาม พร็อพเพอร์ตี้ต่อไปนี้ช่วยให้คุณปิดใช้เหตุการณ์การแตะแบบแยกในมุมมองภายในกลุ่มมุมมองที่เฉพาะเจาะจงและในหน้าต่างต่างๆ ได้

  • แอตทริบิวต์ android:splitMotionEvents สำหรับ ViewGroup ช่วยให้คุณปิดใช้เหตุการณ์การแตะแบบแยกที่เกิดขึ้นระหว่างมุมมองย่อยในเลย์เอาต์ได้ เช่น
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>

    วิธีนี้จะทำให้มุมมองย่อยในเลย์เอาต์แนวนอนไม่สามารถแยกเหตุการณ์การแตะได้ โดยมีเพียงมุมมองเดียวเท่านั้นที่รับเหตุการณ์การแตะได้ในแต่ละครั้ง

  • พร็อพเพอร์ตี้สไตล์ android:windowEnableSplitTouch ช่วยให้คุณปิดใช้เหตุการณ์การแตะแยกในหน้าต่างต่างๆ ได้โดยใช้กับธีมสำหรับกิจกรรมหรือทั้งแอปพลิเคชัน เช่น
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>

    เมื่อใช้ธีมนี้กับ <activity> หรือ <application> ระบบจะยอมรับเฉพาะเหตุการณ์การสัมผัสภายในกรอบเวลากิจกรรมปัจจุบัน ตัวอย่างเช่น ปิดใช้การแยก เหตุการณ์การสัมผัสในหน้าต่างต่างๆ แถบระบบจะไม่สามารถรับกิจกรรมการสัมผัสพร้อมกันกับ กิจกรรม การดำเนินการนี้ไม่ส่งผลต่อการที่มุมมองภายในกิจกรรมจะแยกการสัมผัสได้ กิจกรรม - โดยค่าเริ่มต้น กิจกรรมจะยังคงสามารถแยกกิจกรรมการสัมผัสในการแสดงผลต่างๆ ได้

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

WebKit

  • คลาส WebViewFragment ใหม่เพื่อสร้างส่วนที่ประกอบด้วย WebView
  • เมธอด WebSettings ใหม่:
    • setDisplayZoomControls() อนุญาตให้คุณซ่อน การควบคุมการซูมบนหน้าจอขณะที่ยังอนุญาตให้ผู้ใช้ซูมด้วยท่าทางสัมผัสแบบนิ้ว (ต้องตั้งค่า setBuiltInZoomControls() true)
    • WebSettings ใหม่ setEnableSmoothTransition() ช่วยให้คุณเปิดใช้การเปลี่ยนภาพที่ราบรื่นเมื่อเลื่อนและซูม เมื่อเปิดใช้ WebView จะเลือกโซลูชันเพื่อเพิ่มประสิทธิภาพสูงสุด (เช่น เนื้อหาของ WebView อาจไม่อัปเดตในระหว่างการเปลี่ยน)
  • เมธอด WebView ใหม่:
    • onPause() callback เพื่อหยุดการประมวลผลที่เกี่ยวข้องกับ WebView ชั่วคราวเมื่อมีการซ่อน WebView วิธีนี้จะช่วยลด CPU ที่ไม่จำเป็นหรือ การจราจรของข้อมูลในเครือข่ายเมื่อ WebView ไม่ได้อยู่ในเบื้องหน้า
    • โทรกลับ onResume() เพื่อกลับมาประมวลผลต่อ ที่เชื่อมโยงกับ WebView ซึ่งหยุดชั่วคราวระหว่างวันที่ onPause()
    • saveWebArchive() ช่วยให้คุณบันทึกมุมมองปัจจุบันเป็นไฟล์เก็บถาวรของเว็บในอุปกรณ์ได้
    • showFindDialog() เริ่มการค้นหาข้อความใน มุมมองปัจจุบัน

เบราว์เซอร์

แอปพลิเคชันเบราว์เซอร์จะเพิ่มฟีเจอร์ต่อไปนี้เพื่อรองรับเว็บแอปพลิเคชัน

  • การจับภาพสื่อ

    ตามข้อกำหนดของการจับภาพสื่อ HTML เบราว์เซอร์อนุญาตให้เว็บแอปพลิเคชันเข้าถึงความสามารถในการจับภาพเสียง รูปภาพ และวิดีโอของอุปกรณ์ เช่น HTML ต่อไปนี้เป็นอินพุตสําหรับให้ผู้ใช้จับภาพเพื่ออัปโหลด

    <input type="file" accept="image/*;capture=camera" />

    หรือหากไม่รวมพารามิเตอร์ capture=camera ผู้ใช้สามารถเลือกจับภาพใหม่ด้วยกล้องหรือเลือกรูปภาพจากอุปกรณ์ (เช่น จากแอปพลิเคชันแกลเลอรี)

  • การวางแนวของอุปกรณ์

    ตามที่กำหนดโดยเหตุการณ์การวางแนวของอุปกรณ์ เบราว์เซอร์อนุญาตให้เว็บแอปพลิเคชันรับฟังเหตุการณ์ DOM ที่ให้ข้อมูล เกี่ยวกับการวางแนวและการเคลื่อนไหวของอุปกรณ์

    การวางแนวของอุปกรณ์จะแสดงด้วยแกน x, y และ z ในหน่วยองศา และการเคลื่อนไหวคือ แสดงด้วยข้อมูลความเร่งและอัตราการหมุน หน้าเว็บสามารถลงทะเบียนเหตุการณ์การวางแนวโดยเรียกใช้ window.addEventListener ด้วยประเภทเหตุการณ์ "deviceorientation" และลงทะเบียนเหตุการณ์การเคลื่อนไหวโดยการลงทะเบียนประเภทเหตุการณ์ "devicemotion"

  • การเปลี่ยนรูปแบบ 3 มิติของ CSS

    ตามที่ข้อกำหนดโมดูลการเปลี่ยนรูปแบบ 3 มิติของ CSS ระบุไว้ เบราว์เซอร์อนุญาตให้เปลี่ยนรูปแบบองค์ประกอบที่แสดงผลโดย CSS เป็น 3 มิติ

ยูทิลิตี JSON

ชั้นเรียนใหม่ JsonReader และ JsonWriter ช่วยคุณได้ อ่านและเขียนสตรีม JSON API ใหม่นี้ช่วยเสริมคลาส org.json ซึ่งจัดการเอกสารในหน่วยความจำ

คุณสร้างอินสแตนซ์ของ JsonReader ได้โดยการเรียกใช้ เมธอดของเครื่องมือสร้างและส่ง InputStreamReader ที่ฟีดสตริง JSON จากนั้นเริ่มอ่านวัตถุโดยเรียกใช้ beginObject() และอ่าน ชื่อคีย์ที่มี nextName() อ่านค่าโดยใช้เมธอด ตามลำดับ เช่น nextString() และ nextInt() และดำเนินการต่อไปในขณะที่ hasNext() เป็นจริง

คุณสามารถสร้างอินสแตนซ์ของ JsonWriter โดยเรียกใช้ตัวสร้างของอินสแตนซ์และ การส่ง OutputStreamWriter ที่เหมาะสม แล้วเขียนข้อมูล JSON ในลักษณะ คล้ายกับผู้อ่าน โดยใช้ name() เพื่อเพิ่มชื่อพร็อพเพอร์ตี้ และเมธอด value() ที่เหมาะสมเพื่อเพิ่ม

โดยคลาสเหล่านี้จะเข้มงวดโดยค่าเริ่มต้น setLenient() ในแต่ละชั้นเรียนจะกำหนดค่า ให้เปิดกว้างในสิ่งที่ยอมรับมากกว่า การผ่อนปรนนี้ โหมดแยกวิเคราะห์ยังสามารถใช้ร่วมกับโปรแกรมแยกวิเคราะห์เริ่มต้นของ org.json ได้ด้วย

ค่าคงที่ของฟีเจอร์ใหม่

<uses-feature> ควรใช้เอลิเมนต์ manfest เพื่อแจ้งหน่วยงานภายนอก (เช่น Google Play) เกี่ยวกับชุดของ ฟีเจอร์ของฮาร์ดแวร์และซอฟต์แวร์ที่แอปพลิเคชันต้องใช้ ในรุ่นนี้ Android จะเพิ่ม ตามค่าคงที่ใหม่ที่แอปพลิเคชันสามารถประกาศด้วยองค์ประกอบนี้ได้

  • "android.hardware.faketouch"

    เมื่อประกาศแล้ว ข้อมูลนี้จะระบุว่าแอปพลิเคชันใช้งานร่วมกับอุปกรณ์ที่มีหน้าจอสัมผัสจำลอง (หรือดีกว่า) ได้ อุปกรณ์ที่มีหน้าจอสัมผัสจำลองให้อินพุตของผู้ใช้ ระบบที่สามารถจำลองชุดย่อยของหน้าจอสัมผัส ความสามารถ ตัวอย่างของระบบอินพุตดังกล่าวคือเมาส์หรือรีโมตคอนโทรลที่ควบคุมเคอร์เซอร์บนหน้าจอ ระบบอินพุตดังกล่าวรองรับกิจกรรมการสัมผัสแบบพื้นฐาน เช่น การคลิกลง คลิกขึ้น แล้วลาก อย่างไรก็ตาม อินพุตประเภทที่ซับซ้อนมากขึ้น (เช่น ท่าทางสัมผัส การแตะ ฯลฯ) อาจทำได้ยากขึ้นหรือเป็นไปไม่ได้เลยในอุปกรณ์การแตะเสมือน (และท่าทางสัมผัสแบบหลายจุดใช้ไม่ได้อย่างแน่นอน)

    หากแอปพลิเคชันไม่ต้องใช้ท่าทางสัมผัสที่ซับซ้อน และคุณ ไม่ต้องการให้กรองแอปพลิเคชันออกจากอุปกรณ์ที่มีหน้าจอสัมผัสจำลอง คุณจะ ควรประกาศ "android.hardware.faketouch" ด้วย <uses-feature> วิธีนี้จะช่วยให้แอปพลิเคชันของคุณพร้อมให้บริการในอุปกรณ์ประเภทต่างๆ มากที่สุด รวมถึงอุปกรณ์ที่ให้อินพุตหน้าจอสัมผัสจำลองเท่านั้น

    อุปกรณ์ทั้งหมดที่มีหน้าจอสัมผัสรองรับ "android.hardware.faketouch" ด้วย เนื่องจาก ความสามารถของหน้าจอสัมผัสคือความสามารถพิเศษของ Faketouch ดังนั้น เว้นแต่ว่าคุณต้องการให้ หน้าจอสัมผัส คุณควรเพิ่ม<uses-feature> สำหรับ Faketouch

สิทธิ์ใหม่

  • "android.permission.BIND_REMOTEVIEWS"

    คุณต้องประกาศว่าเป็นสิทธิ์ที่จำเป็นในไฟล์ Manifest ของ <service> สำหรับการติดตั้งใช้งาน RemoteViewsService ตัวอย่างเช่น เมื่อ การสร้างวิดเจ็ตแอปที่ใช้ RemoteViewsService เพื่อสร้าง มุมมองคอลเล็กชัน รายการไฟล์ Manifest อาจมีลักษณะดังนี้

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />

เทคโนโลยีแพลตฟอร์มใหม่

  • พื้นที่เก็บข้อมูล
    • การรองรับระบบไฟล์ ext4 เพื่อเปิดใช้พื้นที่เก็บข้อมูล eMMC ในตัว
    • FUSE ระบบไฟล์เพื่อรองรับอุปกรณ์ MTP
    • รองรับโหมดโฮสต์ USB เพื่อให้รองรับแป้นพิมพ์และฮับ USB
    • การรองรับ MTP/PTP
  • เคอร์เนล Linux
    • อัปเกรดเป็น 2.6.36
  • Dalvik VM
    • โค้ดใหม่เพื่อรองรับและเพิ่มประสิทธิภาพ SMP
    • การปรับปรุงหลายด้านในโครงสร้างพื้นฐาน JIT
    • การปรับปรุงเครื่องมือเก็บขยะ:
      • ปรับแต่งสำหรับ SMP
      • รองรับฮีปขนาดใหญ่ขึ้น
      • การจัดการแบบรวมศูนย์สำหรับบิตแมปและบัฟเฟอร์ไบต์
  • ไลบรารี Daalvik Core
    • การติดตั้งใช้งาน NIO (ไลบรารี I/O สมัยใหม่) ใหม่ที่รวดเร็วขึ้นมาก
    • ปรับปรุงข้อความข้อยกเว้น
    • การแก้ไขความถูกต้องและประสิทธิภาพทั้งหมด

รายงานความแตกต่างของ API

ดูรายละเอียดการเปลี่ยนแปลง API ทั้งหมดใน Android 3.0 (API ระดับ 11) ได้ที่รายงานความแตกต่างของ API

ระดับ API

แพลตฟอร์ม Android 3.0 มีรุ่นอัปเดตของ Framework API API ของ Android 3.0 ได้รับตัวระบุจำนวนเต็ม 11 — ซึ่งก็คือ ที่จัดเก็บไว้ในตัวระบบเอง ตัวระบุนี้เรียกว่า "ระดับ API" ช่วยให้ เพื่อพิจารณาอย่างถูกต้องว่าแอปพลิเคชันสามารถทำงานร่วมกับ ระบบก่อนที่จะติดตั้งแอปพลิเคชัน

หากต้องการใช้ API ที่เปิดตัวใน Android 3.0 ในแอปพลิเคชันของคุณ คุณจะต้องคอมไพล์แอปพลิเคชันกับไลบรารี Android ที่ให้ไว้ใน แพลตฟอร์ม Android 3.0 SDK คุณอาจต้องเพิ่มแอตทริบิวต์ android:minSdkVersion="11" ลงในองค์ประกอบ <uses-sdk> ในไฟล์ Manifest ของแอปพลิเคชันด้วย ทั้งนี้ขึ้นอยู่กับความต้องการ หากแอปพลิเคชันออกแบบมาเพื่อทำงานบน Android 2.3 ขึ้นไปเท่านั้น การประกาศแอตทริบิวต์จะป้องกันไม่ให้ติดตั้งแอปพลิเคชันในแพลตฟอร์มเวอร์ชันเก่า

สำหรับข้อมูลเพิ่มเติม โปรดอ่าน API คืออะไร ระดับ