API Android 3.0

Cấp độ API: 11

Đối với nhà phát triển, nền tảng Android 3.0 (HONEYCOMB) có sẵn ở dạng có thể tải xuống cho SDK Android. Nền tảng có thể tải xuống này bao gồm hệ thống và thư viện Android hình ảnh cũng như một tập hợp giao diện trình mô phỏng và hơn thế nữa. Nền tảng có thể tải xuống này không chứa thư viện.

Đối với các nhà phát triển, nền tảng Android 3.0 được cung cấp dưới dạng thành phần có thể tải xuống cho SDK Android. Nền tảng có thể tải xuống bao gồm thư viện Android và hình ảnh hệ thống, cũng như một tập hợp giao diện trình mô phỏng và khác. Để bắt đầu phát triển hoặc thử nghiệm trên Android 3.0, sử dụng Trình quản lý SDK Android để tải nền tảng xuống SDK của bạn.

Tổng quan về API

Các phần dưới đây cung cấp tổng quan kỹ thuật về tính năng mới dành cho nhà phát triển trong Android 3.0, bao gồm các tính năng mới và thay đổi trong API khung kể từ phiên bản trước đó.

Mảnh

Mảnh là một thành phần khung mới cho phép bạn tách các phần tử riêng biệt của một hoạt động thành các mô-đun độc lập xác định giao diện người dùng và vòng đời riêng. Để tạo một mảnh này, bạn phải mở rộng lớp Fragment và triển khai một số vòng đời phương thức gọi lại, tương tự như Activity. Sau đó, bạn có thể kết hợp nhiều các mảnh trong một hoạt động duy nhất để tạo giao diện người dùng nhiều ngăn, trong đó mỗi ngăn này quản lý vòng đời và hoạt động đầu vào của người dùng riêng.

Bạn cũng có thể dùng một mảnh mà không cần cung cấp giao diện người dùng mà thay vào đó dùng mảnh đó làm một worker cho hoạt động, chẳng hạn như để quản lý tiến trình tải xuống chỉ diễn ra khi đang chạy.

Ngoài ra:

  • Các mảnh là những mảnh độc lập và bạn có thể sử dụng lại chúng trong nhiều hoạt động
  • Bạn có thể thêm, xoá, thay thế và tạo ảnh động cho các mảnh bên trong hoạt động.
  • Bạn có thể thêm các mảnh vào ngăn xếp lui do hoạt động quản lý, giúp duy trì trạng thái của các mảnh khi chúng được thay đổi và cho phép người dùng di chuyển ngược lại thông qua các tiểu bang
  • Bằng cách cung cấp bố cục thay thế, bạn có thể kết hợp và khớp các mảnh, dựa trên cho kích thước và hướng màn hình
  • Các mảnh có quyền truy cập trực tiếp vào hoạt động của vùng chứa và có thể đóng góp các mục cho thanh thao tác của hoạt động (sẽ thảo luận tiếp theo)

Để quản lý các mảnh trong hoạt động của mình, bạn phải sử dụng FragmentManager. Lớp này cung cấp một số API để tương tác với các mảnh, chẳng hạn như như tìm mảnh trong hoạt động và kéo mảnh ra khỏi ngăn xếp lui để khôi phục trạng thái trước đó.

Để thực hiện giao dịch, chẳng hạn như thêm hoặc xoá mảnh, bạn phải tạo FragmentTransaction. Sau đó, bạn có thể gọi các phương thức như add() remove() hoặc replace(). Khi bạn đã áp dụng tất cả các thay đổi bạn muốn thực hiện cho giao dịch, bạn phải gọi commit() và hệ thống sẽ áp dụng giao dịch mảnh cho hoạt động đó.

Để biết thêm thông tin về cách sử dụng mảnh, hãy đọc tài liệu về Mảnh. Nhiều các mẫu cũng có sẵn trong Ứng dụng API minh hoạ.

Thanh hành động

Thanh thao tác thay thế cho thanh tiêu đề truyền thống ở đầu cửa sổ hoạt động. Nó bao gồm biểu trưng ứng dụng ở góc bên trái và cung cấp một giao diện mới cho các mục trong Trình đơn tuỳ chọn. Ngoài ra, Thanh tác vụ cho phép bạn:

  • Thêm trực tiếp các mục trong trình đơn vào Thanh tác vụ—dưới dạng "mục hành động".

    Trong phần khai báo XML cho mục trong trình đơn, hãy thêm thuộc tính android:showAsAction có giá trị "ifRoom". Khi có đủ chỗ, trình đơn xuất hiện trực tiếp trong Thanh tác vụ. Nếu không, mục sẽ được đặt trong trình đơn mục bổ sung, được tiết lộ qua biểu tượng trình đơn ở bên phải của Thanh tác vụ.

  • Thay thế mục hành động bằng một tiện ích (chẳng hạn như hộp tìm kiếm)—tạo một "lượt xem hành động".

    Trong phần khai báo XML cho mục trong trình đơn, hãy thêm thuộc tính android:actionViewLayout bằng tài nguyên bố cục hoặc thuộc tính android:actionViewClass có tên lớp là tiện ích. (Bạn cũng phải khai báo thuộc tính android:showAsAction để mặt hàng đó xuất hiện trong Thanh thao tác.) Nếu không có đủ chỗ trong Thanh thao tác và mục đó sẽ xuất hiện trong mục bổ sung sẽ hoạt động giống như một mục trong trình đơn thông thường và không hiển thị tiện ích.

  • Thêm một thao tác vào biểu trưng của ứng dụng và thay thế bằng biểu trưng tuỳ chỉnh

    Biểu trưng ứng dụng được tự động gán mã android.R.id.home, mà hệ thống phân phối tới lệnh gọi lại onOptionsItemSelected() của hoạt động khi chạm vào. Bạn chỉ cần phản hồi mã này trong cuộc gọi lại để thực hiện một hành động, chẳng hạn như chuyển đến "trang chủ" của ứng dụng của bạn.

    Để thay thế biểu tượng bằng biểu trưng, hãy chỉ định biểu trưng ứng dụng của bạn trong tệp kê khai bằng android:logo rồi gọi setDisplayUseLogoEnabled(true) trong hoạt động của bạn.

  • Thêm breadcrumb (tập hợp liên kết phân cấp) để điều hướng ngược lại thông qua ngăn xếp lui gồm các mảnh
  • Thêm thẻ hoặc danh sách thả xuống để di chuyển qua các mảnh
  • Tuỳ chỉnh Thanh thao tác bằng các giao diện và hình nền

Thanh tác vụ là tiêu chuẩn cho tất cả các ứng dụng sử dụng giao diện ba chiều mới, cũng là chuẩn khi bạn đặt android:minSdkVersion hoặc android:targetSdkVersion thành "11".

Để biết thêm thông tin về Thanh thao tác, hãy đọc tài liệu về Thanh thao tác. Nhiều các mẫu cũng có sẵn trong Ứng dụng API minh hoạ.

Bảng nhớ tạm của hệ thống

Giờ đây, các ứng dụng có thể sao chép và dán dữ liệu (ngoài văn bản đơn thuần) vào và từ trên toàn hệ thống bảng nhớ tạm. Dữ liệu được cắt bớt có thể ở dạng văn bản thuần tuý, URI hoặc ý định.

Bằng cách cung cấp cho hệ thống quyền truy cập vào dữ liệu bạn muốn người dùng sao chép, thông qua một nhà cung cấp nội dung, người dùng có thể sao chép nội dung phức tạp (như hình ảnh hoặc cấu trúc dữ liệu) từ ứng dụng của bạn và hãy dán mã vào một ứng dụng khác hỗ trợ loại nội dung đó.

Để bắt đầu sử dụng bảng nhớ tạm, hãy lấy đối tượng ClipboardManager toàn cục bằng cách gọi getSystemService(CLIPBOARD_SERVICE).

Để sao chép một mục vào bảng nhớ tạm, bạn cần tạo một đối tượng ClipData mới, đối tượng này lưu giữ một hoặc nhiều ClipData.Item mỗi đối tượng mô tả một thực thể duy nhất. Cách tạo đối tượng ClipData chỉ chứa một ClipData.Item, bạn có thể sử dụng một trong các phương thức trợ giúp, chẳng hạn như newPlainText(), newUri()newIntent(). Các công cụ này sẽ trả về một đối tượng ClipData được tải sẵn bằng ClipData.Item mà bạn cung cấp.

Để thêm ClipData vào bảng nhớ tạm, hãy truyền thành phần này vào setPrimaryClip() cho thực thể ClipboardManager.

Sau đó, bạn có thể đọc một tệp trong bảng nhớ tạm (để dán) bằng cách gọi getPrimaryClip() trên ClipboardManager. Xử lý ClipData mà bạn nhận được phức tạp và bạn cần đảm bảo mình có thể thực sự xử lý được loại dữ liệu trong bảng nhớ tạm trước khi thử dán.

Bảng nhớ tạm chỉ chứa một phần dữ liệu đã cắt (một ClipData đối tượng) cùng một lúc, nhưng một ClipData có thể chứa nhiều ClipData.Item.

Để biết thêm thông tin, hãy đọc bài viết Sao chép và Dán tài liệu này. Bạn cũng có thể xem cách triển khai đơn giản cho thao tác sao chép và dán trong Bản minh hoạ API mẫu và triển khai hoàn chỉnh hơn trong mẫu Ghi chú.

Kéo và thả

API mới giúp đơn giản hoá thao tác kéo và thả trong giao diện người dùng của ứng dụng. Kéo là hoạt động truyền một loại dữ liệu nào đó—được thực hiện trong một ClipData từ nơi này sang nơi khác. Điểm bắt đầu và kết thúc của thao tác kéo là View, do đó, các API trực tiếp xử lý thao tác kéo và thả trong lớp View.

Thao tác kéo và thả có vòng đời được xác định bằng một số thao tác kéo, mỗi thao tác được xác định bằng đối tượng DragEvent—chẳng hạn như ACTION_DRAG_STARTED, ACTION_DRAG_ENTEREDACTION_DROP. Mỗi chế độ xem muốn tham gia vào một lượt kéo có thể theo dõi các hành động này.

Để bắt đầu kéo nội dung trong hoạt động của bạn, hãy gọi startDrag() trên View, cung cấp một đối tượng ClipData biểu thị dữ liệu cần kéo, View.DragShadowBuilder để tạo điều kiện đổ bóng mà người dùng nhìn thấy dưới ngón tay của họ khi kéo và Object có thể chia sẻ thông tin về đối tượng kéo với các khung hiển thị có thể nhận đối tượng.

Để chấp nhận một đối tượng kéo trong View (nhận "drop"), hãy đăng ký chế độ xem với OnDragListener bằng cách gọi setOnDragListener(). Khi một sự kiện kéo xảy ra trong khung hiển thị, hệ thống gọi onDrag() cho OnDragListener. Hệ thống này sẽ nhận một DragEvent mô tả loại thao tác kéo đã diễn ra (chẳng hạn như ACTION_DRAG_STARTED, ACTION_DRAG_ENTEREDACTION_DROP). Trong khi kéo, hệ thống liên tục gọi onDrag() cho chế độ xem bên dưới khi kéo để đưa ra luồng sự kiện kéo. Khung hiển thị nhận có thể hỏi loại sự kiện được gửi tới onDragEvent() bằng cách gọi getAction() trên DragEvent.

Lưu ý: Mặc dù một sự kiện kéo có thể chứa đối tượng ClipData, nhưng sự kiện này không liên quan đến bảng nhớ tạm của hệ thống. Kéo và thả tuyệt đối không được đưa dữ liệu đã kéo vào bảng nhớ tạm thời của hệ thống.

Để biết thêm thông tin, hãy đọc phần Kéo và Thả tài liệu. Bạn cũng có thể xem cách triển khai thao tác kéo và thả trong Ứng dụng API minh hoạHoneycomb Gallery .

Tiện ích ứng dụng

Android 3.0 hỗ trợ một số lớp tiện ích mới để người dùng có thể tương tác nhiều hơn với ứng dụng Màn hình chính, bao gồm: GridView, ListView, StackView, ViewFlipperAdapterViewFlipper.

Quan trọng hơn, bạn có thể sử dụng RemoteViewsService mới để tạo ứng dụng các tiện ích có bộ sưu tập, sử dụng các tiện ích như GridView, ListViewStackView được hỗ trợ bởi dữ liệu từ xa, chẳng hạn như từ một nhà cung cấp nội dung.

Lớp AppWidgetProviderInfo (được xác định trong XML bằng phần tử <appwidget-provider>) cũng hỗ trợ 2 trường mới: autoAdvanceViewIdpreviewImage. Trường autoAdvanceViewId cho phép bạn chỉ định mã chế độ xem của khung hiển thị phụ của tiện ích ứng dụng cần được máy chủ lưu trữ của tiện ích ứng dụng tự động nâng cao. Chiến lược phát hành đĩa đơn Trường previewImage chỉ định bản xem trước của nội dung tiện ích ứng dụng trông giống như và được hiển thị cho người dùng từ bộ chọn tiện ích. Nếu trường này không được cung cấp, biểu tượng của tiện ích ứng dụng sẽ được dùng để xem trước.

Để giúp tạo hình ảnh xem trước cho tiện ích ứng dụng (để chỉ định trong trường previewImage), trình mô phỏng Android bao gồm một có tên là "Xem trước tiện ích". Để tạo hình ảnh xem trước, hãy chạy ứng dụng này, chọn tiện ích ứng dụng cho ứng dụng của bạn và thiết lập cách bạn muốn hình ảnh xem trước xuất hiện, sau đó lưu và đặt tệp đó vào tài nguyên có thể vẽ của ứng dụng.

Bạn có thể xem cách triển khai các tính năng mới của tiện ích ứng dụng trong Tiện ích ứng dụng StackViewTiện ích danh sách thời tiết .

Thông báo trên thanh trạng thái

Các API Notification đã được mở rộng để hỗ trợ thêm trạng thái có nội dung phong phú thanh thông báo, cùng với một lớp Notification.Builder mới giúp bạn dễ dàng tạo các đối tượng Notification.

Các tính năng mới gồm có:

  • Hỗ trợ biểu tượng lớn trong thông báo, sử dụng setLargeIcon(). Việc này thường dành cho ứng dụng xã hội để hiển thị ảnh liên hệ của người là nguồn tin hoặc để các ứng dụng đa phương tiện hiển thị hình thu nhỏ của album.
  • Hỗ trợ bố cục tuỳ chỉnh trong biểu ngữ thanh trạng thái, sử dụng setTicker().
  • Hỗ trợ bố cục thông báo tuỳ chỉnh để bao gồm các nút có PendingIntent, cho các tiện ích thông báo có tính tương tác cao hơn. Ví dụ: một thông báo có thể kiểm soát việc phát nhạc mà không cần bắt đầu một hoạt động.

Trình tải nội dung

API khung mới hỗ trợ việc tải dữ liệu không đồng bộ bằng lớp Loader. Bạn có thể sử dụng đối tượng này kết hợp với các thành phần giao diện người dùng như thành phần hiển thị và để chủ động tải dữ liệu từ các luồng worker. Lớp con CursorLoader được thiết kế đặc biệt để giúp bạn làm điều này đối với dữ liệu được hỗ trợ bởi ContentProvider.

Bạn chỉ cần triển khai giao diện LoaderCallbacks để nhận lệnh gọi lại khi có yêu cầu trình tải mới hoặc dữ liệu đã đã thay đổi, hãy gọi initLoader() để khởi tạo cho hoạt động hoặc mảnh của bạn.

Để biết thêm thông tin, hãy đọc tài liệu về Trình tải. Bạn cũng có thể thấy mã ví dụ sử dụng trình tải trong LoaderCursor Mẫu LoaderThrottle.

Bluetooth A2DP và API tai nghe

Android hiện bao gồm API dành cho các ứng dụng để xác minh trạng thái của Bluetooth A2DP đã kết nối và thiết bị cấu hình tai nghe. Ví dụ: các ứng dụng có thể xác định khi tai nghe Bluetooth đã kết nối để nghe nhạc và thông báo cho người dùng khi thích hợp. Ứng dụng cũng có thể nhận được thông báo cho các lệnh AT cụ thể của nhà cung cấp và thông báo cho người dùng về trạng thái của kết nối thiết bị, chẳng hạn như khi thiết bị được kết nối sắp hết pin.

Bạn có thể khởi chạy BluetoothProfile tương ứng bằng cách gọi getProfileProxy() với A2DP hoặc HEADSET hằng số hồ sơ và một BluetoothProfile.ServiceListener để nhận các lệnh gọi lại khi ứng dụng Bluetooth đã được kết nối hoặc bị ngắt kết nối.

Khung ảnh động

Khung ảnh động linh hoạt hoàn toàn mới cho phép bạn tạo ảnh động cho các thuộc tính tuỳ ý của mọi đối tượng (Thành phần hiển thị, Thành phần có thể vẽ, Mảnh, Đối tượng hoặc bất kỳ thành phần nào khác). Công cụ này giúp bạn xác định một số khía cạnh của ảnh động, chẳng hạn như:

  • Thời lượng
  • Số lượng và hành vi lặp lại
  • Loại nội suy thời gian
  • Tập hợp Trình tạo ảnh động để phát ảnh động cùng nhau, theo tuần tự hoặc sau độ trễ được chỉ định
  • Độ trễ làm mới khung hình

Bạn có thể xác định các khía cạnh ảnh động này và các khía cạnh khác cho số nguyên, số thực và số thập lục phân của đối tượng giá trị màu mặc định. Tức là khi một đối tượng có trường thuộc tính cho một trong các loại này, bạn có thể thay đổi giá trị theo thời gian để ảnh hưởng đến ảnh động. Để tạo ảnh động cho bất kỳ loại giá trị nào khác, hãy cho biết hệ thống cách tính toán giá trị cho loại đã cho đó, bằng cách triển khai giao diện TypeEvaluator.

Bạn có thể sử dụng hai ảnh động để tạo ảnh động cho các giá trị của một thuộc tính: ValueAnimatorObjectAnimator. ValueAnimator tính toán các giá trị ảnh động, nhưng không biết giá trị cụ thể đối tượng hoặc thuộc tính được tạo ảnh động. Công cụ này chỉ thực hiện các phép tính và bạn phải theo dõi thông tin cập nhật và xử lý dữ liệu theo logic của riêng bạn. ObjectAnimator là một lớp con của ValueAnimator và cho phép bạn đặt đối tượng và thuộc tính để tạo ảnh động, đồng thời xử lý tất cả tác vụ tạo ảnh động. Tức là bạn cung cấp cho ObjectAnimator đối tượng để tạo ảnh động, thuộc tính của đối tượng thay đổi theo thời gian và một tập hợp giá trị để áp dụng cho thuộc tính theo thời gian, sau đó bắt đầu ảnh động.

Ngoài ra, lớp LayoutTransition sẽ cho phép chuyển đổi tự động ảnh động cho các thay đổi mà bạn thực hiện đối với bố cục hoạt động. Để bật chuyển đổi cho một phần của bố cục, hãy tạo một đối tượng LayoutTransition rồi đặt đối tượng đó vào bất kỳ ViewGroup nào bằng cách gọi setLayoutTransition(). Điều này khiến ứng dụng mặc định ảnh động để chạy bất cứ khi nào các mục được thêm vào hoặc bị xoá khỏi nhóm. Để chỉ định tùy chỉnh ảnh động, hãy gọi setAnimator() trên LayoutTransition và cung cấp Animator tuỳ chỉnh, chẳng hạn như ValueAnimator hoặc ObjectAnimator thảo luận ở trên.

Để biết thêm thông tin, hãy xem tài liệu về Ảnh động thuộc tính. Bạn có thể cũng xem một số mẫu sử dụng API ảnh động trong API Ứng dụng minh hoạ.

Khung giao diện người dùng mở rộng

  • Lựa chọn trắc nghiệm cho ListView và GridView

    Chế độ CHOICE_MODE_MULTIPLE_MODAL mới dành cho setChoiceMode() cho phép người dùng chọn nhiều mục từ ListView hoặc GridView. Khi dùng trong kết hợp với Thanh tác vụ, người dùng có thể chọn nhiều mục rồi chọn hành động để thực hiện từ danh sách các tuỳ chọn trong Thanh tác vụ (đã chuyển thành Thanh thao tác nhiều lựa chọn Chế độ tác vụ).

    Để bật lựa chọn trắc nghiệm, hãy gọi setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) và đăng ký MultiChoiceModeListener bằng setMultiChoiceModeListener().

    Khi người dùng nhấn và giữ một mục, Thanh hành động sẽ chuyển sang tuỳ chọn Nhiều lựa chọn Chế độ hành động. Hệ thống sẽ thông báo cho MultiChoiceModeListener khi các mục được chọn bằng cách gọi onItemCheckedStateChanged().

    Để xem ví dụ về lựa chọn trắc nghiệm, hãy xem List15. java trong ứng dụng mẫu API Demos.

  • API mới để chuyển đổi khung hiển thị

    Các API mới cho phép bạn dễ dàng áp dụng các biến đổi 2D và 3D cho các thành phần hiển thị trong hoạt động của bạn của bạn. Các phép biến đổi mới có thể thực hiện được bằng một tập hợp các thuộc tính đối tượng giúp xác định các thuộc tính của khung hiển thị vị trí bố cục, hướng, độ trong suốt, v.v.

    Có các phương thức mới để đặt thuộc tính khung hiển thị: setAlpha(), setBottom(), setLeft(), setRight(), setBottom(), setPivotX(), setPivotY(), setRotationX(), setRotationY(), setScaleX(), setScaleY(), setAlpha(), v.v.

    Một số phương thức cũng có thuộc tính XML tương ứng mà bạn có thể chỉ định trong bố cục để áp dụng phép biến đổi mặc định. Các thuộc tính hiện có bao gồm: translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotYalpha.

    Sử dụng một số thuộc tính thành phần hiển thị mới này kết hợp với khung ảnh động mới (được thảo luận ở trên), bạn có thể dễ dàng áp dụng một số ảnh động ưa thích cho khung hiển thị của mình. Ví dụ: để xoay một khung hiển thị trên trục y, cung cấp ObjectAnimator cùng với View, phương thức "rotationY" thuộc tính, cũng như các giá trị bắt đầu và kết thúc:

    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();
    
  • Giao diện ba chiều mới

    Các tiện ích hệ thống chuẩn và giao diện tổng thể đã được thiết kế lại và kết hợp giao diện mới "hình ba chiều" chủ đề giao diện người dùng. Hệ thống sẽ áp dụng giao diện mới bằng hệ thống kiểu và giao diện chuẩn.

    Bất kỳ ứng dụng nào nhắm đến nền tảng Android 3.0 – bằng cách đặt android:minSdkVersion hoặc giá trị android:targetSdkVersion thành "11" – kế thừa giao diện ba chiều theo mặc định. Tuy nhiên, nếu ứng dụng của bạn cũng áp dụng giao diện riêng thì giao diện đó sẽ ghi đè giao diện ba chiều, trừ phi bạn cập nhật các kiểu để kế thừa giao diện ba chiều.

    Để áp dụng giao diện ba chiều cho từng hoạt động hoặc kế thừa các hoạt động đó trong giao diện của riêng bạn định nghĩa, hãy sử dụng một trong vài Theme.Holo mới giao diện. Nếu ứng dụng của bạn tương thích với phiên bản Android thấp hơn 3.0 và đang áp dụng giao diện tuỳ chỉnh, thì bạn nên chọn giao diện dựa trên nền tảng phiên bản.

  • Tiện ích mới
    • AdapterViewAnimator

      Lớp cơ sở cho AdapterView thực hiện ảnh động khi chuyển đổi giữa các chế độ xem.

    • AdapterViewFlipper

      ViewAnimator đơn giản tạo ảnh động giữa 2 hoặc nhiều khung hiển thị có đã được thêm vào. Mỗi lần chỉ có một trẻ xuất hiện. Nếu được yêu cầu, thẻ có thể tự động lật trong khoảng mỗi trẻ theo một khoảng thời gian cố định.

    • CalendarView

      Cho phép người dùng chọn ngày trong lịch bằng cách chạm vào ngày và có thể cuộn hoặc vuốt lịch sang một ngày mong muốn. Bạn có thể định cấu hình phạm vi ngày có sẵn trong tiện ích.

    • ListPopupWindow

      Tự neo vào khung hiển thị dành cho máy chủ lưu trữ và hiển thị danh sách các lựa chọn, chẳng hạn như danh sách các đề xuất khi nhập vào thành phần hiển thị EditText.

    • NumberPicker

      Cho phép người dùng chọn một số điện thoại trong một dải ô được xác định trước. Tiện ích này trình bày dữ liệu đầu vào và nút mũi tên lên và xuống để chọn số. Việc chạm vào trường nhập cho phép người dùng cuộn qua các giá trị hoặc chạm lại để chỉnh sửa trực tiếp giá trị hiện tại. Công cụ này cũng cho phép bạn lập bản đồ vị trí vào chuỗi, để chuỗi tương ứng được hiển thị thay vì chỉ mục vị trí.

    • PopupMenu

      Hiển thị Menu trong cửa sổ bật lên phương thức liên kết với một khung hiển thị. Chiến lược phát hành đĩa đơn cửa sổ bật lên xuất hiện bên dưới chế độ xem liên kết nếu còn chỗ hoặc phía trên chế độ xem nếu không còn chỗ. Nếu IME (mềm bàn phím) đều hiển thị, cửa sổ bật lên không chồng lên IME cho đến khi người dùng chạm vào .

    • SearchView

      Cung cấp hộp tìm kiếm mà bạn có thể định cấu hình để phân phối các truy vấn tìm kiếm đến một hoạt động và hiển thị các đề xuất tìm kiếm (theo cách tương tự như hộp thoại tìm kiếm truyền thống). Chiến dịch này tiện ích đặc biệt hữu ích khi cung cấp tiện ích tìm kiếm trong Thanh tác vụ. Để biết thêm thông tin, xem Tạo giao diện tìm kiếm.

    • StackView

      Một khung hiển thị cho thấy các thành phần con trong ngăn xếp 3D và cho phép người dùng vuốt qua như một trò chơi Rolodex.

Đồ hoạ

  • Đồ hoạ 2D được tăng tốc phần cứng

    Giờ đây, bạn có thể bật trình kết xuất OpenGL cho ứng dụng của mình bằng cách đặt android:hardwareAccelerated="true" trong <application> của phần tử tệp kê khai hoặc cho <activity> riêng lẻ phần tử.

    Cờ này giúp các ứng dụng bằng cách giúp chúng vẽ nhanh hơn. Điều này giúp ảnh động mượt mà hơn, cuộn mượt mà hơn và hiệu suất tổng thể cũng như phản hồi tương tác của người dùng tốt hơn.

  • Xem thông tin hỗ trợ cho các lớp phần cứng và phần mềm

    Theo mặc định, View không có lớp nào được chỉ định. Bạn có thể chỉ định rằng khung hiển thị được hỗ trợ bởi một lớp phần cứng hoặc phần mềm, được chỉ định bởi các giá trị LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE, sử dụng setLayerType() hoặc layerType .

    Lớp phần cứng được hỗ trợ bởi một hoạ tiết đặc trưng của phần cứng (thường là Đối tượng vùng đệm khung hoặc FBO trên phần cứng OpenGL) và khiến khung hiển thị được kết xuất bằng tính năng kết xuất phần cứng của Android quy trình, nhưng chỉ khi tăng tốc phần cứng cho hệ phân cấp khung hiển thị. Khi phần cứng tăng tốc bị tắt, các lớp phần cứng hoạt động chính xác như các lớp phần mềm.

    Lớp phần mềm được bitmap hỗ trợ và khiến khung hiển thị được kết xuất bằng cách sử dụng quy trình kết xuất phần mềm, ngay cả khi tăng tốc phần cứng được bật. Các lớp phần mềm nên tránh khi cây chế độ xem bị ảnh hưởng cập nhật thường xuyên. Mỗi bản cập nhật sẽ yêu cầu kết xuất lại phần mềm. Lớp phần mềm này có thể bị chậm.

    Để biết thêm thông tin, hãy xem tài liệu LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE.

  • Công cụ đồ hoạ 3D RenderScript

    Renderscript là khung thời gian chạy 3D, cung cấp cả API để tạo cảnh 3D như một ngôn ngữ chương trình đổ bóng đặc biệt, độc lập với nền tảng để có hiệu suất tối đa. Khi sử dụng Renderscript, bạn có thể tăng tốc các thao tác đồ hoạ và xử lý dữ liệu. RenderScript là một cách lý tưởng để tạo hiệu ứng 3D hiệu suất cao cho ứng dụng, hình nền, băng chuyền, v.v.

    Để biết thêm thông tin, xem phần Kết xuất và tính toán 3D với Tài liệu về RenderScript.

Nội dung nghe nhìn

  • Video tua nhanh thời gian

    API Máy quay video hiện đã hỗ trợ khả năng quay video tua nhanh thời gian. setCaptureRate() đặt tốc độ khung hình cần được chụp.

  • Hỗ trợ hoạ tiết cho luồng hình ảnh

    SurfaceTexture mới cho phép bạn chụp luồng hình ảnh dưới dạng OpenGL ES hoạ tiết. Bằng cách gọi setPreviewTexture() cho Camera, bạn có thể chỉ định SurfaceTexture để vẽ chế độ phát video hoặc khung xem trước từ máy ảnh.

  • Phát trực tiếp qua HTTP

    Giờ đây, các ứng dụng có thể chuyển URL danh sách phát M3U đến khung nội dung đa phương tiện để bắt đầu phát trực tiếp HTTP trong phiên truyền trực tuyến. Khung nội dung đa phương tiện hỗ trợ hầu hết thông số kỹ thuật phát trực tiếp qua HTTP, bao gồm cả tốc độ bit thích ứng. Xem tài liệu Định dạng nội dung nghe nhìn được hỗ trợ để biết thêm thông tin.

  • Dữ liệu EXIF

    ExifInterface bao gồm các trường mới cho khẩu độ, ISO và độ phơi sáng của ảnh bất cứ lúc nào.

  • Hồ sơ máy quay video

    Phương thức hasProfile() mới và một số video cấu hình chất lượng (chẳng hạn như QUALITY_1080P, QUALITY_720P, QUALITY_CIF và các cấu hình khác) cho phép bạn xác định máy quay video và các lựa chọn chất lượng.

  • Chuyển tệp nội dung nghe nhìn kỹ thuật số

    Nền tảng này bao gồm hỗ trợ tích hợp cho Giao thức truyền hình ảnh/phương tiện truyền thông (MTP/PTP) qua USB, cho phép người dùng dễ dàng chuyển bất kỳ loại tệp đa phương tiện nào giữa các thiết bị và sang máy tính lưu trữ. Nhà phát triển có thể xây dựng trên sự hỗ trợ này, tạo ra các ứng dụng cho phép người dùng tạo hoặc quản lý các tệp đa phương tiện mà họ có thể muốn chuyển hoặc chia sẻ trên các thiết bị.

  • Quản lý quyền kỹ thuật số (DRM)

    Khung quản lý quyền kỹ thuật số (DRM) mới có thể mở rộng để kiểm tra và thực thi quyền kỹ thuật số quyền. Hoạt động này được triển khai trong 2 lớp kiến trúc:

    • API khung DRM, được hiển thị với các ứng dụng và chạy qua máy ảo Dalvik để ứng dụng chuẩn.
    • Một trình quản lý DRM mã gốc triển khai API khung và hiển thị giao diện cho DRM các trình bổ trợ giúp xử lý việc quản lý và giải mã quyền cho nhiều lược đồ DRM.

    Đối với các nhà phát triển ứng dụng, khung này cung cấp một API hợp nhất, trừu tượng để đơn giản hoá việc quản lý nội dung được bảo vệ. API này ẩn sự phức tạp của các thao tác DRM và cho phép chế độ hoạt động nhất quán cho cả nội dung được bảo vệ lẫn nội dung không được bảo vệ cũng như trên nhiều loại DRM khác.

    Đối với nhà sản xuất thiết bị, chủ sở hữu nội dung và nhà cung cấp phương tiện kỹ thuật số trên Internet, DRM API trình bổ trợ của khung cung cấp một phương thức để thêm hỗ trợ cho lược đồ DRM được lựa chọn vào Hệ thống Android để thực thi bảo mật hoạt động bảo vệ nội dung.

    Bản phát hành xem trước không cung cấp bất kỳ trình bổ trợ DRM gốc nào để kiểm tra và thực thi kỹ thuật số quyền. Tuy nhiên, nhà sản xuất thiết bị có thể gửi các trình bổ trợ DRM kèm theo thiết bị của họ.

    Bạn có thể tìm thấy mọi API DRM trong gói android.drm.

Hỗ trợ bàn phím

  • Hỗ trợ phím Control, Meta, Caps Lock, Num Lock và Scroll Lock Để biết thêm thông tin, hãy xem META_CTRL_ON và các trường liên quan.
  • Hỗ trợ các bàn phím đầy đủ kiểu máy tính để bàn, bao gồm hỗ trợ các phím như Escape, Home, End, Xoá và các mục khác. Bạn có thể xác định xem các sự kiện chính có đến từ bàn phím đầy đủ hay không bằng cách đang truy vấn getKeyboardType() và kiểm tra KeyCharacterMap.FULL
  • TextView hiện hỗ trợ thao tác cắt, sao chép, dán và chọn tất cả bằng tổ hợp phím Control+X, Control+C, Ctrl+V và Control+A. Chế độ này cũng hỗ trợ phím PageUp/PageDown, Home/End và chọn văn bản dựa trên bàn phím.
  • KeyEvent thêm một số phương thức mới để giúp bạn dễ dàng kiểm tra khoá trạng thái của đối tượng sửa đổi một cách chính xác và nhất quán. Hãy xem hasModifiers(int)! hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers().
  • Các ứng dụng có thể triển khai phím tắt tuỳ chỉnh bằng cách phân lớp con Activity, Dialog hoặc View và triển khai onKeyShortcut(). Khung gọi phương thức này bất cứ khi nào một phím được kết hợp với phím Control. Khi tạo một Trình đơn tuỳ chọn, bạn có thể đăng ký bàn phím bằng cách đặt thuộc tính android:alphabeticShortcut hoặc android:numericShortcut cho mỗi <item> (hoặc có setShortcut()).
  • Android 3.0 có "bàn phím ảo" mới thiết bị có mã KeyCharacterMap.VIRTUAL_KEYBOARD. Thế giới ảo bàn phím có sơ đồ phím Hoa Kỳ kiểu máy tính hữu ích cho việc tổng hợp các sự kiện chính để kiểm thử đầu vào.

Sự kiện chạm phân tách

Trước đây, chỉ một khung hiển thị duy nhất có thể chấp nhận các sự kiện chạm tại một thời điểm. Android 3.0 thêm tính năng hỗ trợ chia tách các sự kiện chạm giữa các khung hiển thị và thậm chí cả các cửa sổ để các khung hiển thị khác nhau có thể chấp nhận các sự kiện chạm đồng thời.

Theo mặc định, các sự kiện chạm phân tách được bật khi một ứng dụng nhắm mục tiêu Android 3.0. Tức là khi ứng dụng đã đặt android:minSdkVersion hoặc giá trị của thuộc tính android:targetSdkVersion thành "11".

Tuy nhiên, các thuộc tính sau cho phép bạn tắt các sự kiện chạm phân tách trên các thành phần hiển thị bên trong các nhóm chế độ xem cụ thể và trên các cửa sổ.

  • Thuộc tính android:splitMotionEvents cho nhóm thành phần hiển thị cho phép bạn tắt các sự kiện chạm phân tách xảy ra giữa các khung hiển thị con trong một bố cục. Ví dụ:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>
    

    Theo đó, các khung hiển thị con trong bố cục tuyến tính không thể phân tách các sự kiện nhấn mà chỉ có một khung hiển thị có thể nhận các sự kiện chạm cùng một lúc.

  • Thuộc tính kiểu android:windowEnableSplitTouch cho phép bạn tắt các sự kiện chạm phân tách trên các cửa sổ bằng cách áp dụng sự kiện đó cho một giao diện của hoạt động hoặc toàn bộ ứng dụng. Ví dụ:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>
    

    Khi giao diện này được áp dụng cho <activity> hoặc <application>, chỉ chấp nhận sự kiện chạm trong cửa sổ hoạt động hiện tại. Ví dụ: bằng cách tắt tính năng phân tách sự kiện chạm trên các cửa sổ, thanh hệ thống không thể nhận các sự kiện chạm cùng một lúc với của bạn. Điều này không ảnh hưởng đến việc các thành phần hiển thị bên trong hoạt động có thể phân tách thao tác chạm hay không Sự kiện – theo mặc định, hoạt động vẫn có thể chia các sự kiện chạm giữa các khung hiển thị.

    Để biết thêm thông tin về cách tạo giao diện, hãy đọc bài viết Áp dụng kiểu và giao diện.

WebKit

  • Lớp WebViewFragment mới để tạo một mảnh bao gồm một WebView
  • Các phương thức WebSettings mới:
    • setDisplayZoomControls() cho phép bạn ẩn các điều khiển thu phóng trên màn hình mà vẫn cho phép người dùng thu phóng bằng cử chỉ của ngón tay (phải đặt setBuiltInZoomControls() true).
    • Phương thức WebSettings mới, setEnableSmoothTransition(), cho phép bạn để giúp chuyển đổi mượt mà khi kéo và thu phóng. Khi được bật, WebView sẽ chọn một giải pháp để tối đa hoá hiệu suất (ví dụ: nội dung của WebView có thể không cập nhật trong chuyển tiếp).
  • Các phương thức WebView mới:
    • Lệnh gọi lại onPause() để tạm dừng mọi quá trình xử lý được liên kết với WebView khi WebView bị ẩn. Điều này rất hữu ích để giảm CPU hoặc lưu lượng truy cập mạng khi WebView không ở nền trước.
    • Lệnh gọi lại onResume() để tiếp tục xử lý liên kết với WebView đã bị tạm dừng trong onPause().
    • saveWebArchive() cho phép bạn lưu chế độ xem hiện tại dưới dạng một tệp lưu trữ web trên thiết bị.
    • showFindDialog() sẽ bắt đầu tìm kiếm văn bản sau chế độ xem hiện tại.

Trình duyệt

Ứng dụng Trình duyệt thêm các tính năng sau để hỗ trợ các ứng dụng web:

  • Ghi lại nội dung nghe nhìn

    Như được xác định bởi HTML Media Capture trình duyệt, Trình duyệt sẽ cho phép các ứng dụng web truy cập vào chức năng ghi âm, chụp ảnh và quay video khả năng của thiết bị. Ví dụ: HTML sau đây cung cấp đầu vào để người dùng chụp ảnh để tải lên:

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

    Hoặc bằng cách loại trừ tham số capture=camera, người dùng có thể chọn chụp hình ảnh mới bằng máy ảnh hoặc chọn một hình ảnh từ thiết bị (chẳng hạn như từ ứng dụng Thư viện).

  • Hướng thiết bị

    Như được xác định trong Sự kiện hướng thiết bị trình duyệt, Trình duyệt cho phép các ứng dụng web theo dõi các sự kiện DOM cung cấp thông tin về hướng thực và chuyển động của thiết bị.

    Hướng của thiết bị được biểu thị bằng các trục x, y và z, theo độ và chuyển động là được biểu thị bằng dữ liệu tăng tốc và tốc độ xoay. Một trang web có thể đăng ký hướng dẫn các sự kiện bằng cách gọi window.addEventListener với loại sự kiện "deviceorientation" và đăng ký các sự kiện chuyển động bằng cách đăng ký loại sự kiện "devicemotion".

  • Biến đổi CSS 3D

    Như được xác định theo CSS 3D Transform qua mô-đun, Trình duyệt cho phép biến đổi các thành phần do CSS hiển thị thành ba thứ nguyên.

Tiện ích JSON

Các lớp học mới, JsonReaderJsonWriter, sẽ giúp ích cho bạn đọc và ghi luồng JSON. Các API mới bổ sung cho các lớp org.json, lớp này thao tác một tài liệu trong bộ nhớ.

Bạn có thể tạo một thực thể của JsonReader bằng cách gọi phương thức hàm khởi tạo và truyền InputStreamReader cấp dữ liệu chuỗi JSON. Sau đó, hãy bắt đầu đọc một đối tượng bằng cách gọi beginObject(), đọc một tên khoá bằng nextName(), đọc giá trị bằng phương thức tương ứng với loại, chẳng hạn như nextString()nextInt(), rồi tiếp tục làm như vậy trong khi hasNext() là đúng.

Bạn có thể tạo một thực thể của JsonWriter bằng cách gọi hàm khởi tạo và truyền OutputStreamWriter thích hợp. Sau đó, hãy viết dữ liệu JSON theo cách tương tự như trình đọc, dùng name() để thêm tên thuộc tính và phương thức value() thích hợp để thêm phương thức giá trị.

Các lớp này đều nghiêm ngặt theo mặc định. setLenient() trong mỗi lớp sẽ định cấu hình chúng tự do hơn trong những gì chúng chấp nhận. Mức độ thoải mái này chế độ phân tích cú pháp cũng tương thích với trình phân tích cú pháp mặc định của org.json.

Hằng số tính năng mới

<uses-feature> phần tử manfest để thông báo cho các thực thể bên ngoài (chẳng hạn như Google Play) về tập hợp các tính năng phần cứng và phần mềm mà ứng dụng của bạn phụ thuộc. Trong bản phát hành này, Android thêm các hằng số mới mà ứng dụng có thể khai báo bằng phần tử này:

  • "android.hardware.faketouch"

    Khi khai báo, mã này cho biết rằng ứng dụng tương thích với một thiết bị cung cấp màn hình cảm ứng mô phỏng (hoặc tốt hơn). Thiết bị có màn hình cảm ứng mô phỏng giúp người dùng hệ thống có thể mô phỏng một nhóm nhỏ màn hình cảm ứng các chức năng khác nhau. Ví dụ về hệ thống nhập như vậy là chuột hoặc điều khiển từ xa điều khiển con trỏ trên màn hình. Các hệ thống nhập liệu như vậy hỗ trợ các sự kiện chạm cơ bản như nhấp xuống, nhấp lên và kéo. Tuy nhiên, các kiểu dữ liệu đầu vào phức tạp hơn (chẳng hạn như cử chỉ, cử chỉ hất, v.v.) có thể khó hoặc trên các thiết bị cảm ứng giả (và các cử chỉ cảm ứng đa điểm chắc chắn là không thực hiện được).

    Nếu đơn đăng ký của bạn không yêu cầu các cử chỉ phức tạp và bạn đủ điều kiện không muốn ứng dụng của mình bị lọc khỏi các thiết bị có màn hình cảm ứng mô phỏng, bạn nên khai báo "android.hardware.faketouch" với <uses-feature> . Bằng cách này, ứng dụng của bạn sẽ khả dụng cho nhiều loại thiết bị nhất, bao gồm cả những trình chỉ cung cấp đầu vào màn hình cảm ứng được mô phỏng.

    Tất cả thiết bị có màn hình cảm ứng cũng hỗ trợ "android.hardware.faketouch" vì Các chức năng của màn hình cảm ứng là tập hợp các chức năng cảm ứng giả. Do đó, trừ phi bạn thực sự yêu cầu màn hình cảm ứng, bạn nên thêm <uses-feature> giả mạo.

Các quyền mới

  • "android.permission.BIND_REMOTEVIEWS"

    Bạn phải khai báo đây là một quyền bắt buộc trong tệp kê khai <service> để triển khai RemoteViewsService. Ví dụ: khi tạo một Tiện ích ứng dụng sử dụng RemoteViewsService để điền sẵn một chế độ xem bộ sưu tập, mục nhập tệp kê khai có thể có dạng như sau:

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

Công nghệ nền tảng mới

  • Bộ nhớ
    • hỗ trợ hệ thống tệp ext4 để bật bộ nhớ eMMC tích hợp.
    • Hệ thống tệp FUSE để hỗ trợ các thiết bị MTP.
    • Hỗ trợ chế độ hỗ trợ USB để hỗ trợ bàn phím và bộ chia USB.
    • Hỗ trợ MTP/PTP
  • Hạt nhân Linux
    • Đã nâng cấp lên phiên bản 2.6.36
  • Máy ảo Dalvik
    • Mã mới để hỗ trợ và tối ưu hoá cho SMP
    • Nhiều điểm cải tiến đối với cơ sở hạ tầng JIT
    • Cải tiến công cụ thu gom rác:
      • Đã điều chỉnh để bật tính năng SMP
      • Hỗ trợ kích thước vùng nhớ khối xếp lớn hơn
      • Xử lý hợp nhất cho bitmap và vùng đệm byte
  • Thư viện lõi Dalvik
    • Triển khai NIO mới, nhanh hơn nhiều (thư viện I/O hiện đại)
    • Cải thiện thông báo ngoại lệ
    • Độ chính xác và hiệu suất xuyên suốt

Báo cáo sự khác biệt về API

Để xem chi tiết tất cả thay đổi đối với API trong Android 3.0 (Cấp độ API) 11), hãy xem Báo cáo điểm khác biệt về API.

Cấp độ API:

Nền tảng Android 3.0 cung cấp phiên bản cập nhật của API khung. API Android 3.0 được gán một mã nhận dạng bằng số nguyên — 11 – tức là được lưu trữ trong chính hệ thống. Giá trị nhận dạng này, được gọi là "Cấp độ API", cho phép để xác định chính xác xem một ứng dụng có tương thích với hệ thống trước khi cài đặt ứng dụng.

Để sử dụng các API được giới thiệu trong Android 3.0 trong ứng dụng của bạn, bạn cần biên dịch ứng dụng dựa trên thư viện Android được cung cấp trong nền tảng SDK Android 3.0. Tuỳ thuộc vào nhu cầu của mình, bạn có thể bạn cũng cần thêm một android:minSdkVersion="11" cho phần tử <uses-sdk> trong đơn đăng ký tệp kê khai. Nếu ứng dụng của bạn được thiết kế để chỉ chạy trên Android 2.3 trở lên, việc khai báo thuộc tính sẽ ngăn ứng dụng được cài đặt trước đó các phiên bản của nền tảng.

Để biết thêm thông tin, hãy đọc bài viết API là gì Cấp độ?