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ínhandroid:actionViewClass
có tên lớp là tiện ích. (Bạn cũng phải khai báo thuộc tínhandroid: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ạionOptionsItemSelected()
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ọisetDisplayUseLogoEnabled(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()
và 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_ENTERED
và
ACTION_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_ENTERED
và
ACTION_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ạ và 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
, ViewFlipper
và AdapterViewFlipper
.
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
, ListView
và StackView
đượ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: autoAdvanceViewId
và previewImage
. 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 StackView và Tiệ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 và 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: ValueAnimator
và ObjectAnimator
. 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 chosetChoiceMode()
cho phép người dùng chọn nhiều mục từListView
hoặcGridView
. 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ằngsetMultiChoiceModeListener()
.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ọionItemCheckedStateChanged()
.Để 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
,transformPivotY
vàalpha
.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ớiView
, 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_HARDWARE
vàLAYER_TYPE_SOFTWARE
, sử dụngsetLayerType()
hoặclayerType
.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_HARDWARE
vàLAYER_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ọisetPreviewTexture()
choCamera
, bạn có thể chỉ địnhSurfaceTexture
để 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 traKeyCharacterMap.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 xemhasModifiers(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ặcView
và triển khaionKeyShortcut()
. 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ínhandroid:alphabeticShortcut
hoặcandroid: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ộtWebView
- 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 đặtsetBuiltInZoomControls()
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 trongonPause()
. 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.
- Lệnh gọi lạ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, JsonReader
và JsonWriter
, 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()
và 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 khaiRemoteViewsService
. Ví dụ: khi tạo một Tiện ích ứng dụng sử dụngRemoteViewsService
để đ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 độ?