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 คุณต้องขยายคลาส Fragment และดำเนินการหลายวงจร เมธอด Callback ซึ่งคล้ายกับ Activity จากนั้นคุณสามารถรวม ในกิจกรรมเดียวเพื่อสร้าง UI แบบหลายช่อง ซึ่งแต่ละกิจกรรม แผงจะจัดการวงจรการใช้งานของตนเองและข้อมูลจากผู้ใช้

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

นอกจากนี้

  • Fragment จะจบในตัวและคุณนำไปใช้ซ้ำในกิจกรรมที่หลากหลายได้
  • คุณจะเพิ่ม นำออก แทนที่ และทำให้ส่วนย่อยภายในกิจกรรมเคลื่อนไหวได้
  • คุณสามารถเพิ่มส่วนย่อยในแบ็กสแต็กที่มีการจัดการโดยกิจกรรม โดยคงสถานะ ส่วนย่อยเมื่อมีการเปลี่ยนแปลง และช่วยให้ผู้ใช้ย้อนกลับไปดูส่วนอื่นๆ รัฐ
  • โดย การให้ ทางเลือกอื่นๆ คุณสามารถผสมผสานและจับคู่ส่วนย่อย ตาม ขนาดและการวางแนวหน้าจอ
  • 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 โดยอัตโนมัติ ซึ่งระบบส่งไปยัง Callback 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ที่คุณได้รับสามารถ อาจซับซ้อน และต้องแน่ใจว่าคุณสามารถจัดการประเภทข้อมูลที่อยู่ในคลิปบอร์ดได้ ก่อนที่จะวาง

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

สำหรับข้อมูลเพิ่มเติม โปรดอ่าน และการวางเอกสาร นอกจากนี้ คุณยังสามารถดูการคัดลอกและวางแบบง่ายๆ ได้ในการสาธิต API และการติดตั้งใช้งานที่สมบูรณ์ยิ่งขึ้นในตัวอย่าง 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 แอปพลิเคชัน

วิดเจ็ตแอป

แอนดรอยด์ 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()
  • รองรับเลย์เอาต์การแจ้งเตือนที่กำหนดเองเพื่อรวมปุ่มที่มี PendingIntents สำหรับวิดเจ็ตการแจ้งเตือนแบบอินเทอร์แอกทีฟมากขึ้น ตัวอย่างเช่น การแจ้งเตือนสามารถควบคุมการเล่นเพลงได้โดยไม่ต้องเริ่มกิจกรรม

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

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

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

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

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

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

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

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

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

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

คุณกำหนดลักษณะภาพเคลื่อนไหวเหล่านี้และอื่นๆ สำหรับ int, ลอยตัว และเลขฐาน 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 และนำไปใช้ได้ ธีมที่กำหนดเอง คุณควรเลือกธีมตามแพลตฟอร์ม version

  • วิดเจ็ตใหม่
    • 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

    เลเยอร์ฮาร์ดแวร์มีพื้นผิวเฉพาะสำหรับฮาร์ดแวร์ (โดยทั่วไปคือ Frame Buffer Object หรือ 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 ของ Google เมื่อโทรหา setPreviewTexture() สำหรับ Camera คุณสามารถระบุ SurfaceTexture ที่จะใช้วาดการเล่นวิดีโอหรือเฟรมตัวอย่างจาก กล้อง

  • สตรีมมิง HTTP แบบสด

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

  • ข้อมูล EXIF

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

  • โปรไฟล์ Camcorder

    เมธอด 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 ที่หลากหลาย

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

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

    คุณสามารถค้นหา DRM API ทั้งหมดในแพ็กเกจ android.drm

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

  • รองรับแป้นกดร่วม Control, Meta, Caps Lock, Num Lock และ Scroll Lock สำหรับข้อมูลเพิ่มเติม ดู META_CTRL_ON และช่องที่เกี่ยวข้อง
  • สนับสนุนแป้นพิมพ์แบบเดสก์ท็อปเต็มรูปแบบ รวมถึงการสนับสนุนแป้นต่างๆ เช่น Escape, Home, End, ลบและอื่นๆ คุณระบุได้ว่าเหตุการณ์สําคัญมาจากแป้นพิมพ์แบบเต็มหรือไม่โดยทำดังนี้ กำลังค้นหา 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() เฟรมเวิร์กเรียกใช้เมธอดนี้ เมื่อมีการรวมคีย์กับแป้น Control เมื่อสร้างเมนูตัวเลือก คุณจะลงทะเบียนแป้นพิมพ์ได้ โดยการตั้งค่าแอตทริบิวต์ 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 สำหรับกลุ่มข้อมูลพร็อพเพอร์ตี้ ช่วยให้คุณปิดใช้เหตุการณ์การแยกสัมผัสที่เกิดขึ้นระหว่างมุมมองย่อยในเลย์เอาต์ได้ เช่น
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

    ด้วยวิธีนี้ มุมมองย่อยในเลย์เอาต์แบบเชิงเส้นจะไม่สามารถแยกกิจกรรมการสัมผัส ได้ เนื่องจากจะมีการดูเพียง 1 มุมมองเท่านั้น รับกิจกรรมการสัมผัสทีละรายการ

  • พร็อพเพอร์ตี้รูปแบบ android:windowEnableSplitTouch ช่วยให้คุณปิดใช้เหตุการณ์แบบ Split Touch ในหน้าต่างต่างๆ ได้ โดยนำไปใช้กับธีมของกิจกรรม หรือทั้งแอปพลิเคชัน เช่น
    <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 เมื่อซ่อนไว้ วิธีนี้จะช่วยลด CPU ที่ไม่จำเป็นหรือ การจราจรของข้อมูลในเครือข่ายเมื่อ WebView ไม่ได้อยู่ในเบื้องหน้า
    • โทรกลับ onResume() เพื่อกลับมาประมวลผลต่อ ที่เชื่อมโยงกับ WebView ซึ่งหยุดชั่วคราวระหว่างวันที่ onPause()
    • saveWebArchive() ช่วยให้คุณสามารถบันทึก มุมมองปัจจุบันเป็นที่เก็บเว็บถาวรในอุปกรณ์
    • showFindDialog() เริ่มการค้นหาข้อความใน มุมมองปัจจุบัน

เบราว์เซอร์

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

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

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

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

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

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

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

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

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

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

ยูทิลิตี 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"

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