- cú pháp:
<activity android:allowEmbedded=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:autoRemoveFromRecents=["true" | "false"] android:banner="drawable resource" android:canDisplayOnRemoteDevices=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:colorMode=[ "hdr" | "wideColorGamut"] android:configChanges=["colorMode", "density", "fontScale", "fontWeightAdjustment", "grammaticalGender", "keyboard", "keyboardHidden", "layoutDirection", "locale", "mcc", "mnc", "navigation", "orientation", "screenLayout", "screenSize", "smallestScreenSize", "touchscreen", "uiMode"] android:directBootAware=["true" | "false"] android:documentLaunchMode=["intoExisting" | "always" | "none" | "never"] android:enabled=["true" | "false"] android:enabledOnBackInvokedCallback=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:immersive=["true" | "false"] android:label="string resource" android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance" | "singleInstancePerTask"] android:lockTaskMode=["normal" | "never" | "if_whitelisted" | "always"] android:maxRecents="integer" android:maxAspectRatio="float" android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:parentActivityName="string" android:persistableMode=["persistRootOnly" | "persistAcrossReboots" | "persistNever"] android:permission="string" android:process="string" android:relinquishTaskIdentity=["true" | "false"] android:requireContentUriPermissionFromCaller=["none" | "read" | "readAndWrite" | "readOrWrite" | "write"] android:resizeableActivity=["true" | "false"] android:screenOrientation=["unspecified" | "behind" | "landscape" | "portrait" | "reverseLandscape" | "reversePortrait" | "sensorLandscape" | "sensorPortrait" | "userLandscape" | "userPortrait" | "sensor" | "fullSensor" | "nosensor" | "user" | "fullUser" | "locked"] android:showForAllUsers=["true" | "false"] android:stateNotNeeded=["true" | "false"] android:supportsPictureInPicture=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] > ... </activity>
- có trong:
<application>
- có thể chứa:
<intent-filter>
<meta-data>
<layout>
- mô tả:
- Khai báo một hoạt động (một lớp con
Activity
) triển khai một phần giao diện người dùng trực quan của ứng dụng. Tất cả hoạt động phải được đại diện bằng phần tử<activity>
trong tệp kê khai. Mọi hoạt động chưa khai báo sẽ không được hệ thống phát hiện và chạy. - thuộc tính:
android:allowEmbedded
-
Cho biết hoạt động có thể được chạy dưới dạng phần tử con được nhúng của một hoạt động khác hoạt động cụ thể, đặc biệt là trường hợp trẻ sống trong một vùng chứa, chẳng hạn như
Display
thuộc sở hữu của một hoạt động khác. Ví dụ: các hoạt động được dùng cho thông báo tuỳ chỉnh trên Wear khai báo điều này để Wear có thể hiển thị hoạt động trong luồng ngữ cảnh nằm trong một quy trình khác.Giá trị mặc định của thuộc tính này là
false
. android:allowTaskReparenting
- Liệu hoạt động có thể di chuyển từ tác vụ đã bắt đầu hoạt động sang tác vụ có đối tượng tương đồng hay không khi tác vụ đó được đưa lên trước. Thuộc tính này sẽ là
"true"
nếu hoạt động có thể di chuyển và là"false"
nếu hoạt động vẫn còn trong tác vụ đã bắt đầu hoạt động.Nếu bạn không đặt thuộc tính này, thì giá trị được đặt bởi thuộc tính
allowTaskReparenting
tương ứng của phần tử<application>
sẽ áp dụng cho hoạt động. Giá trị mặc định là"false"
.Thông thường, khi một hoạt động bắt đầu, nó sẽ được liên kết với tác vụ của hoạt động đã bắt đầu nó và sẽ ở đó trong toàn bộ thời gian hoạt động. Bạn có thể sử dụng thuộc tính này để buộc hoạt động đó phải được gán lại cho tác vụ có đối tượng tương đồng với nó khi tác vụ hiện tại không còn được hiển thị. Thông thường, thuộc tính này dùng để di chuyển các hoạt động của một ứng dụng sang tác vụ chính được liên kết với ứng dụng đó.
Ví dụ: nếu một thông báo qua email chứa đường liên kết đến một trang web, thì việc nhấp vào đường liên kết sẽ kích hoạt một hoạt động có thể hiển thị trang web đó. Hoạt động đó được ứng dụng trình duyệt xác định nhưng chạy như một phần của tác vụ email. Nếu hoạt động được gán lại cho tác vụ trình duyệt, thì nó sẽ hiển thị khi sau đó trình duyệt xuất hiện ở nền trước và không hiển thị khi tác vụ email tiếp tục.
Đối tượng tương đồng của một hoạt động được xác định bằng thuộc tính
taskAffinity
. Đối tượng tương đồng của một tác vụ được xác định bằng cách đọc đối tượng tương đồng của hoạt động gốc. Do đó, theo định nghĩa, hoạt động gốc luôn nằm trong tác vụ có cùng đối tượng tương đồng. Vì các hoạt động có chế độ chạy"singleTask"
hoặc"singleInstance"
chỉ có thể ở gốc của một tác vụ, nên việc gán lại bị giới hạn trong chế độ"standard"
và"singleTop"
. (Xem thêm thuộc tínhlaunchMode
.) android:alwaysRetainTaskState
- Liệu trạng thái của tác vụ chứa hoạt động đó có luôn được hệ thống duy trì hay không.
"true"
nếu có và"false"
nếu hệ thống có thể đặt lại tác vụ về trạng thái ban đầu trong một số trường hợp. Giá trị mặc định là"false"
. Thuộc tính này chỉ có ý nghĩa đối với hoạt động gốc của một tác vụ. Thuộc tính này sẽ bị bỏ qua đối với mọi hoạt động khác.Thông thường, hệ thống sẽ xoá một tác vụ (xoá mọi hoạt động khỏi ngăn xếp bên trên hoạt động gốc) trong một số trường hợp khi người dùng chọn lại tác vụ đó trên màn hình chính. Thường thì điều này được thực hiện nếu người dùng không truy cập vào tác vụ trong một khoảng thời gian nhất định, chẳng hạn như 30 phút.
Tuy nhiên, khi thuộc tính này là
"true"
, người dùng luôn quay lại tác vụ khi nó ở trạng thái mới nhất, bất kể họ truy cập bằng cách nào. Điều này hữu ích trong một ứng dụng như trình duyệt web, nơi có rất nhiều trạng thái, chẳng hạn như nhiều thẻ đang mở, mà người dùng không muốn mất. android:autoRemoveFromRecents
- Liệu tác vụ được chạy bởi hoạt động có thuộc tính này có còn trên màn hình Gần đây hay không cho đến khi hoạt động mới nhất trong tác vụ đó hoàn tất. Nếu là
true
, tác vụ sẽ tự động bị xoá khỏi màn hình Gần đây. Thao tác này sẽ ghi đè hành động người dùng sử dụngFLAG_ACTIVITY_RETAIN_IN_RECENTS
. Đó phải là một giá trị boolean,"true"
hoặc"false"
. android:banner
- Một tài nguyên có thể vẽ cung cấp biểu ngữ đồ hoạ mở rộng cho mục được liên kết. Hãy sử dụng với thẻ
<activity>
để cung cấp biểu ngữ mặc định cho hoạt động cụ thể hoặc với thẻ<application>
để cung cấp biểu ngữ cho tất cả các hoạt động của ứng dụng.Hệ thống này sử dụng biểu ngữ để biểu thị một ứng dụng trên màn hình chính của Android TV. Vì chỉ hiện trên màn hình chính, nên biểu ngữ chỉ được chỉ định bởi các ứng dụng có hoạt động xử lý ý định
CATEGORY_LEANBACK_LAUNCHER
.Thuộc tính này được đặt làm tham chiếu đến một tài nguyên có thể vẽ chứa hình ảnh, chẳng hạn như
"@drawable/banner"
. Không có biểu ngữ mặc định.Để biết thêm thông tin, hãy xem mục Cung cấp biểu ngữ trên màn hình chính trong phần Làm quen với ứng dụng TV.
android:canDisplayOnRemoteDevices
-
Cho biết liệu hoạt động có thể hiển thị trên một thiết bị từ xa có thể đang chạy Android hoặc không. Đó phải là một giá trị boolean,
"true"
hoặc"false"
.Giá trị mặc định của thuộc tính này là
"true"
. android:clearTaskOnLaunch
- Liệu mọi hoạt động có bị xoá khỏi tác vụ hay không, ngoại trừ hoạt động gốc, khi nó được chạy lại từ màn hình chính.
"true"
nếu tác vụ luôn bị loại bỏ khỏi hoạt động gốc và"false"
nếu không. Giá trị mặc định là"false"
. Thuộc tính này chỉ có ý nghĩa đối với các hoạt động bắt đầu một tác vụ mới – hoạt động gốc. Thuộc tính này sẽ bị bỏ qua đối với mọi hoạt động khác trong tác vụ.Khi giá trị là
"true"
, mỗi lần người dùng bắt đầu tác vụ, họ sẽ được đưa đến hoạt động gốc bất kể hoạt động sau cùng họ thực hiện trong tác vụ là gì và bất kể việc họ có sử dụng nút Back (Quay lại) hoặc nút Home (Màn hình chính) để thoát khỏi tác vụ. Khi giá trị là"false"
, tác vụ có thể bị xoá các hoạt động trong một số trường hợp, nhưng không phải lúc nào cũng vậy. Để biết thêm thông tin, hãy xem thuộc tínhalwaysRetainTaskState
.Giả sử người dùng chạy hoạt động P từ màn hình chính và từ đó chuyển sang hoạt động Q. Tiếp theo, người dùng nhấn Home (Màn hình chính) rồi quay lại hoạt động P. Thông thường, người dùng sẽ thấy hoạt động Q vì đó là hoạt động sau cùng họ thực hiện trong tác vụ của P. Tuy nhiên, nếu P đặt cờ này thành
"true"
, thì tất cả các hoạt động ở trên hoạt động đó – trong trường hợp này là Q – sẽ bị xoá khi người dùng chạy hoạt động P từ màn hình chính. Vì vậy, người dùng sẽ chỉ thấy P khi quay lại tác vụ.Nếu thuộc tính này và
allowTaskReparenting
đều là"true"
, thì mọi hoạt động có thể được gán lại về cấp độ gốc đều được di chuyển sang tác vụ mà chúng có chung đối tượng tương đồng. Sau đó, các hoạt động còn lại sẽ bị huỷ.Thuộc tính này sẽ bị bỏ qua nếu bạn không đặt
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
. android:colorMode
Chỉ định chế độ màu của hoạt động. Nếu được chỉ định, chế độ màu này có thể là
hdr
hoặcwideColorGamut
.Nếu là
hdr
, hãy yêu cầu hiển thị hoạt động trong một dải động cao nếu thiết bị hỗ trợ hoạt động đó.Nếu là
wideColorGamut
, hãy yêu cầu hiển thị hoạt động ở chế độ gam màu rộng trên các thiết bị tương thích. Ở chế độ gam màu rộng, một cửa sổ có thể hiển thị ở bên ngoài gam màuSRGB
để hiển thị các màu rực rỡ hơn. Nếu thiết bị không hỗ trợ tính năng hiển thị gam màu rộng, thì thuộc tính này sẽ không có hiệu ứng. Để biết thêm thông tin về việc hiển thị ở chế độ màu rộng, vui lòng xem phần Cải thiện đồ hoạ với nội dung màu rộng.android:configChanges
- Liệt kê các thay đổi về cấu hình mà hoạt động tự xử lý. Khi một thay đổi cấu hình xảy ra trong thời gian chạy, theo mặc định, hoạt động sẽ tắt và khởi động lại. Tuy nhiên, việc khai báo cấu hình với thuộc tính này sẽ ngăn hoạt động khởi động lại. Thay vào đó, hoạt động vẫn chạy và phương thức
onConfigurationChanged()
của hoạt động sẽ được gọi.Lưu ý: Chỉ sử dụng thuộc tính này trong các trường hợp đặc biệt để cải thiện hiệu suất và tốc độ phản hồi của ứng dụng. Để biết thêm thông tin, hãy xem phần Xử lý các thay đổi về cấu hình.
Các chuỗi sau là giá trị hợp lệ cho thuộc tính này. Nhiều giá trị được phân tách bằng
|
, chẳng hạn như"locale|navigation|orientation"
.Giá trị Mô tả "colorMode"
Các chức năng của chế độ màu của màn hình (gam màu hoặc dải động) đã thay đổi.
Lưu ý: Chế độ màu mà hoạt động yêu cầu bằng thuộc tính
colorMode
hoặc trong thời gian chạy khác với khả năng của các chế độ màu khác nhau. Một hoạt động thay đổi chế độ màu đang sử dụng không gây ra thay đổi về cấu hình vì chức năng màu của màn hình không thay đổi."density"
Thay đổi đối với mật độ hiển thị, chẳng hạn như khi người dùng chỉ định một tỷ lệ hiển thị khác hoặc màn hình khác hiện đang hoạt động.
Đã thêm trong API cấp 24.
"fontScale"
Thay đổi đối với hệ số tỷ lệ phông chữ, chẳng hạn như khi người dùng chọn một cỡ chữ chung mới. "fontWeightAdjustment"
Mức độ tăng độ đậm phông chữ đã thay đổi. "grammaticalGender"
Giống trong ngữ pháp của ngôn ngữ đã thay đổi. Xem GrammaticalInflectionManager
.Đã thêm trong API cấp 34.
"keyboard"
Thay đổi đối với loại bàn phím, chẳng hạn như khi người dùng cắm bàn phím bên ngoài. "keyboardHidden"
Thay đổi đối với khả năng hỗ trợ tiếp cận của bàn phím, chẳng hạn như khi người dùng tiết lộ bàn phím phần cứng. "layoutDirection"
Thay đổi đối với hướng bố cục, chẳng hạn như từ trái sang phải (LTR) thành từ phải sang trái (RTL).
Đã thêm trong API cấp 17.
"locale"
Thay đổi đối với ngôn ngữ, chẳng hạn như khi người dùng chọn một ngôn ngữ mới hiển thị văn bản. "mcc"
Thay đổi đối với mã di động quốc gia (MCC) của số nhận dạng thuê bao di động quốc tế (IMSI) khi phát hiện thấy SIM cập nhật MCC. "mnc"
Thay đổi đối với mã mạng di động (MNC) của IMSI khi phát hiện thấy SIM cập nhật MNC. "navigation"
Thay đổi đối với loại điều hướng (bi xoay hoặc D-pad). Thông thường, thay đổi này không xảy ra. "orientation"
Thay đổi đối với hướng màn hình, chẳng hạn như khi người dùng xoay thiết bị.
Lưu ý: Nếu ứng dụng nhắm đến Android 3.2 (API cấp 13) trở lên, thì bạn cũng nên khai báo các cấu hình
"screenLayout"
và"screenSize"
vì bố cục và kích thước màn hình có thể thay đổi khi một thiết bị chuyển đổi giữa hướng dọc và ngang."screenLayout"
Thay đổi đối với bố cục màn hình, chẳng hạn như khi một màn hình khác đang hoạt động. "screenSize"
Thay đổi đối với kích thước màn hình hiện tại.
Điều này thể hiện sự thay đổi về kích thước hiện tại, tương ứng với tỷ lệ khung hình hiện tại, vì vậy, kích thước sẽ thay đổi khi người dùng chuyển đổi giữa hướng ngang và dọc.
Đã thêm trong API cấp 13.
"smallestScreenSize"
Thay đổi đối với kích thước màn hình thực.
Điều này thể hiện sự thay đổi về kích thước bất kể hướng nên sẽ chỉ thay đổi khi kích thước màn hình thực tế thay đổi, chẳng hạn như khi chuyển sang màn hình bên ngoài. Thay đổi đối với cấu hình này tương ứng với thay đổi trong cấu hình
smallestWidth
.Đã thêm trong API cấp 13.
"touchscreen"
Thay đổi đối với màn hình cảm ứng. Thông thường, thay đổi này không xảy ra. "uiMode"
Thay đổi đối với chế độ giao diện người dùng, chẳng hạn như khi người dùng đặt thiết bị vào một không gian làm việc hay đế trên ô tô hoặc khi chế độ ban đêm thay đổi. Để biết thêm thông tin về các chế độ giao diện người dùng, hãy xem UiModeManager
.Đã thêm trong API cấp 8.
Tất cả những thay đổi về cấu hình này có thể ảnh hưởng đến các giá trị tài nguyên mà ứng dụng nhìn thấy. Do đó, khi gọi
onConfigurationChanged()
, thông thường, bạn cần phải truy xuất lại tất cả các tài nguyên, bao gồm cả bố cục khung hiển thị và đối tượng có thể vẽ để xử lý thay đổi một cách chính xác.Lưu ý: Để xử lý tất cả các thay đổi về cấu hình liên quan đến chế độ nhiều cửa sổ, hãy sử dụng cả
"screenLayout"
và"smallestScreenSize"
. Chế độ nhiều cửa sổ được hỗ trợ trong phiên bản Android 7.0 (API cấp 24) trở lên. android:directBootAware
Liệu hoạt động có nhận biết khi khởi động trực tiếp hay không – tức là hoạt động có thể chạy trước khi người dùng mở khoá thiết bị không.
Lưu ý: Trong quá trình Khởi động trực tiếp (Direct Boot), một hoạt động trong ứng dụng của bạn chỉ có thể truy cập vào dữ liệu được lưu trữ trong bộ nhớ được bảo vệ của thiết bị.
Giá trị mặc định là
"false"
.android:documentLaunchMode
- Chỉ định cách thêm thực thể mới của hoạt động vào một tác vụ mỗi khi hoạt động đó được chạy.
Thuộc tính này cho phép người dùng mở nhiều tài liệu từ cùng một ứng dụng trên màn hình Gần đây.
Thuộc tính này có 4 giá trị tạo ra các hiệu ứng sau đây khi người dùng mở một tài liệu bằng ứng dụng:
Giá trị Nội dung mô tả "intoExisting"
Hệ thống tìm kiếm một tác vụ có ComponentName
và URI dữ liệu của ý định cơ sở khớp vớiComponentName
và URI dữ liệu của ý định chạy. Nếu tìm thấy một tác vụ như thế, hệ thống sẽ xoá tác vụ đó và khởi động lại với hoạt động gốc nhận lệnh gọi đếnonNewIntent(android.content.Intent)
. Nếu không tìm thấy tác vụ như thế, hệ thống sẽ tạo một tác vụ mới."always"
Hoạt động tạo ra một tác vụ mới cho tài liệu, ngay cả khi tài liệu đó đã được mở. Việc này cũng giống như việc đặt cả hai cờ FLAG_ACTIVITY_NEW_DOCUMENT
vàFLAG_ACTIVITY_MULTIPLE_TASK
."none"
Hoạt động không tạo ra tác vụ mới cho chính nó. Đây là giá trị mặc định, giá trị này chỉ tạo tác vụ mới khi bạn đặt FLAG_ACTIVITY_NEW_TASK
. Màn hình Gần đây sẽ xử lý hoạt động theo mặc định: màn hình sẽ hiển thị một tác vụ duy nhất cho ứng dụng, tác vụ này sẽ tiếp tục hoạt động sau cùng mà người dùng đã gọi."never"
Hoạt động không được chạy trong tài liệu mới ngay cả khi ý định chứa FLAG_ACTIVITY_NEW_DOCUMENT
. Việc đặt giá trị này sẽ ghi đè hành vi của cờFLAG_ACTIVITY_NEW_DOCUMENT
vàFLAG_ACTIVITY_MULTIPLE_TASK
nếu một trong hai cờ này được đặt trong hoạt động và màn hình Gần đây hiển thị một tác vụ duy nhất cho ứng dụng, tác vụ này sẽ tiếp tục hoạt động sau cùng mà người dùng đã gọi.Lưu ý: Đối với các giá trị không phải là
"none"
và"never"
, hoạt động được xác định bằnglaunchMode="standard"
. Nếu không chỉ định thuộc tính này, hệ thống sẽ sử dụngdocumentLaunchMode="none"
. android:enabled
- Liệu hệ thống có thể tạo thực thể cho hoạt động này hay không. Thuộc tính này sẽ là
"true"
nếu hệ thống có thể và là"false"
nếu hệ thống không thể. Giá trị mặc định là"true"
.Phần tử
<application>
có thuộc tínhenabled
riêng áp dụng cho tất cả các thành phần của ứng dụng, bao gồm cả hoạt động. Cả hai thuộc tính<application>
và<activity>
phải là"true"
(vì cả hai đều theo mặc định) để hệ thống có thể tạo thực thể cho hoạt động. Nếu một trong hai là"false"
, hệ thống sẽ không thể tạo thực thể. android:enableOnBackInvokedCallback
- Cờ này cho phép bạn chọn sử dụng ảnh động xem trước của hệ thống ở cấp hoạt động. Hành vi này giúp bạn dễ dàng quản lý việc di chuyển các ứng dụng lớn có nhiều hoạt động sang sử dụng tính năng xem trước thao tác quay lại.
Việc thiết lập
android:enableOnBackInvokedCallback=false
sẽ tắt ảnh động xem trước thao tác quay lại ở cấp hoạt động hoặc cấp ứng dụng, tuỳ thuộc vào nơi bạn thiết lập thẻ và hướng dẫn hệ thống bỏ qua các lệnh gọi đến API nền tảngOnBackInvokedCallback
. android:excludeFromRecents
Liệu việc cần làm do hoạt động này khởi tạo có bị loại trừ khỏi Màn hình Gần đây. Điều đó nghĩa là khi hoạt động này là hoạt động gốc của một tác vụ mới, thuộc tính này sẽ xác định liệu tác vụ có xuất hiện trong danh sách ứng dụng gần đây hay không. Bây giờ
"true"
nếu tác vụ bị loại trừ khỏi danh sách;"false"
nếu được thêm vào. Giá trị mặc định là"false"
.android:exported
Liệu hoạt động có thể được khởi chạy bởi các thành phần của ứng dụng:
- Nếu là
"true"
, ứng dụng nào cũng có thể truy cập vào hoạt động này và hoạt động có thể được chạy theo tên lớp chính xác của nó. - Nếu là
"false"
, chỉ các thành phần của cùng một ứng dụng, các ứng dụng có cùng mã nhận dạng người dùng hoặc các thành phần hệ thống đặc quyền là có thể chạy ứng dụng. Đây là giá trị mặc định khi không có bộ lọc ý định.
Nếu một hoạt động trong ứng dụng của bạn có các bộ lọc ý định, hãy đặt phần tử này thành
"true"
để cho phép các ứng dụng khác khởi động nó. Ví dụ: nếu hoạt động là hoạt động chính của ứng dụng và bao gồmcategory
android.intent.category.LAUNCHER
.Nếu bạn đặt phần tử này thành
"false"
và một ứng dụng cố gắng khởi động hoạt động, thì hệ thống sẽ gửi mộtActivityNotFoundException
.Thuộc tính này không phải là cách duy nhất để hạn chế mức độ hiển thị của một hoạt động với các ứng dụng khác. Quyền cũng được dùng để giới hạn các thực thể bên ngoài có thể gọi hoạt động đó. Xem thuộc tính
permission
.- Nếu là
android:finishOnTaskLaunch
- Liệu thực thể hiện có của hoạt động có bị tắt hay không (ngoại trừ hoạt động gốc) khi người dùng chạy lại tác vụ của hoạt động bằng cách chọn tác vụ trên màn hình chính. Thuộc tính này sẽ là
"true"
nếu hoạt động bị tắt và là"false"
nếu hoạt động không bị tắt. Giá trị mặc định là"false"
.Nếu thuộc tính này và
allowTaskReparenting
đều là"true"
, thì thuộc tính này sẽ được ưu tiên hơn thuộc tính còn lại. Đối tượng tương đồng của hoạt động bị bỏ qua. Hoạt động không được gán lại về cấp độ gốc mà bị huỷ bỏ.Thuộc tính này sẽ bị bỏ qua nếu bạn không đặt
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
. android:hardwareAccelerated
- Liệu tính năng kết xuất tăng tốc phần cứng có được bật cho hoạt động này hay không.
"true"
nếu được bật và"false"
nếu không được bật. Giá trị mặc định là"false"
.Trên Android 3.0 trở lên, trình kết xuất OpenGL tăng tốc phần cứng được cung cấp cho các ứng dụng để cải thiện hiệu suất của nhiều thao tác đồ hoạ 2D phổ biến. Khi bật trình kết xuất tăng tốc phần cứng, hầu hết các thao tác trong Canvas, Paint, Xfermode, ColorFilter, Chương trình đổ bóng và Máy ảnh đều được tăng tốc.
Điều này giúp ảnh động và khả năng cuộn mượt mà hơn, đồng thời mức độ phản hồi tổng thể tốt hơn, ngay cả đối với những ứng dụng không sử dụng thư viện OpenGL của khung một cách rõ ràng. Do đã tăng tài nguyên cần thiết để bật tính năng tăng tốc phần cứng, nên ứng dụng sẽ tốn nhiều RAM hơn.
Không phải tất cả các hoạt động OpenGL 2D đều được tăng tốc. Nếu bạn bật trình kết xuất tăng tốc phần cứng, hãy kiểm tra xem ứng dụng có thể sử dụng trình kết xuất mà không gặp lỗi hay không.
android:icon
Biểu tượng đại diện cho hoạt động. Biểu tượng này được hiển thị cho người dùng khi cần hiển thị hoạt động trên màn hình. Ví dụ: biểu tượng cho các hoạt động khởi tạo tác vụ được hiển thị trong cửa sổ trình chạy. Biểu tượng thường đi kèm với nhãn; để biết thông tin về nhãn, hãy xem thuộc tính
android:label
.Thuộc tính này được đặt làm tham chiếu đến một tài nguyên có thể vẽ và chứa định nghĩa hình ảnh. Nếu bạn không đặt thuộc tính này, thì hệ thống sẽ sử dụng biểu tượng được chỉ định cho toàn bộ ứng dụng. Để biết thêm thông tin, hãy xem thuộc tính
icon
của phần tử<application>
.Biểu tượng của hoạt động – bất kể được đặt ở đây hay do phần tử
<application>
đặt – cũng là biểu tượng mặc định cho tất cả các bộ lọc ý định của hoạt động. Để biết thêm thông tin, hãy xem thuộc tínhicon
của phần tử<intent-filter>
.android:immersive
- Đặt chế độ chìm cho hoạt động hiện tại. Nếu là
"true"
, thành phầnActivityInfo.flags
sẽ luôn cóFLAG_IMMERSIVE
bit đã được đặt, ngay cả khi các thay đổi về chế độ chìm trong thời gian chạy bằng cách sử dụng phương thứcsetImmersive()
. android:label
Nhãn mà người dùng đọc được cho hoạt động. Nhãn xuất hiện trên màn hình khi hoạt động được hiển thị cho người dùng. Nhãn này thường được hiển thị cùng với biểu tượng hoạt động. Nếu bạn không đặt thuộc tính này, nhãn được đặt chung cho ứng dụng sẽ là được sử dụng thay thế. hãy xem phần tử
<application>
Thuộc tínhlabel
.Nhãn của hoạt động – bất kể được đặt ở đây hay do phần tử
<application>
đặt – cũng là nhãn mặc định cho tất cả các bộ lọc ý định của hoạt động. Để biết thêm thông tin, hãy xem thuộc tínhlabel
của phần tử<intent-filter>
.Nhãn được đặt làm tham chiếu đến tài nguyên chuỗi để có thể được bản địa hoá như các chuỗi khác trong giao diện người dùng. Tuy nhiên, để thuận tiện trong quá trình phát triển ứng dụng, bạn cũng có thể đặt nhãn này làm chuỗi thô.
android:launchMode
Hướng dẫn cách chạy hoạt động. Có 5 chế độ, hoạt động cùng với cờ hoạt động (hằng số
FLAG_ACTIVITY_*
) trong các đối tượngIntent
để xác định điều gì sẽ xảy ra khi hoạt động được gọi để xử lý một ý định:"standard"
"singleTop"
"singleTask"
"singleInstance"
"singleInstancePerTask"
Chế độ mặc định là
"standard"
.Như hiển thị trong bảng sau, các chế độ được chia thành 2 nhóm chính, với các hoạt động
"standard"
,"singleTop"
ở một bên và"singleTask"
,"singleInstance"
,"singleInstancePerTask"
ở bên còn lại. Hệ thống có thể tạo thực thể nhiều lần cho một hoạt động có chế độ chạy"standard"
hoặc"singleTop"
.Các thực thể này có thể thuộc về bất kỳ tác vụ nào và có thể ở bất kỳ đâu trong tác vụ hoạt động. Thông thường, chúng được chạy trong tác vụ có tên là
startActivity()
, trừ phi đối tượngIntent
chứa hướng dẫnFLAG_ACTIVITY_NEW_TASK
mà trong trường hợp đó, một tác vụ khác sẽ được chọn. Để biết thêm thông tin, hãy xem thuộc tínhtaskAffinity
.Ngược lại, các hoạt động
"singleTask"
,"singleInstance"
và"singleInstancePerTask"
có các hành vi khác nhau."singleInstancePerTask"
luôn ở cấp độ gốc của tác vụ hoạt động. Ngoài ra, tại mỗi thời điểm, thiết bị chỉ có thể lưu một thực thể của hoạt động"singleInstance"
, trong khi hệ thống có thể tạo thực thể cho hoạt động"singleInstancePerTask
nhiều lần trong các tác vụ khác nhau khi bạn đặtFLAG_ACTIVITY_MULTIPLE_TASK
hoặcFLAG_ACTIVITY_NEW_DOCUMENT
.Một hoạt động có chế độ chạy
"singleTask"
kết hợp các hành vi của"singleInstance"
và"singleInstancePerTask"
: hệ thống có thể tạo thực thể cho hoạt động này nhiều lần và đặt hoạt động vào vị trí bất kỳ trong một tác vụ củataskAffinity
tương tự. Tuy nhiên, thiết bị chỉ có thể lưu giữ 1 tác vụ để xác định vị trí của hoạt động"singleTask"
ở cấp độ gốc của tác vụ hoạt động đó.Các chế độ
"standard"
và"singleTop"
khác nhau ở một khía cạnh, đó là: mỗi lần có ý định mới cho hoạt động"standard"
, một thực thể mới của lớp sẽ được tạo để phản hồi ý định đó. Mỗi thực thể chỉ xử lý một ý định duy nhất. Tương tự, một thực thể mới của hoạt động"singleTop"
cũng có thể được tạo để xử lý ý định mới.Tuy nhiên, nếu tác vụ mục tiêu đã có một thực thể hiện có của hoạt động ở đầu ngăn xếp, thì thực thể đó sẽ nhận được ý định mới, trong lệnh gọi
onNewIntent()
. Một thực thể mới sẽ không được tạo. Mặt khác, nếu thực thể hiện có của hoạt động"singleTop"
nằm trong tác vụ mục tiêu nhưng không ở đầu ngăn xếp hoặc nếu ở đầu ngăn xếp nhưng không nằm trong tác vụ mục tiêu, thì một thực thể mới sẽ được tạo và đẩy vào ngăn xếp.Tương tự, nếu người dùng di chuyển lên một hoạt động trên ngăn xếp hiện tại, thì hành vi đó được xác định bởi chế độ chạy của hoạt động gốc. Nếu hoạt động gốc có chế độ chạy
singleTop
(hoặc ý địnhup
chứaFLAG_ACTIVITY_CLEAR_TOP
), thì cấp độ gốc sẽ được đưa lên đầu ngăn xếp và trạng thái của chế độ này được giữ nguyên.Ý định điều hướng nhận được bằng phương thức
onNewIntent()
của hoạt động gốc. Nếu hoạt động gốc có chế độ chạystandard
và ý địnhup
không chứaFLAG_ACTIVITY_CLEAR_TOP
, thì cả hoạt động hiện tại và hoạt động gốc của nó đều bị huỷ khỏi ngăn xếp và một thực thể mới của hoạt động gốc sẽ được tạo để nhận ý định điều hướng.Chế độ
"singleInstance"
cũng khác với"singleTask"
và"singleInstancePerTask"
ở một khía cạnh duy nhất, đó là: hoạt động có chế độ chạy"singleTask"
hoặc"singleInstancePerTask"
cho phép các hoạt động khác, nhất là các hoạt động"standard"
và"singleTop"
, là một phần trong tác vụ của nó.Mặt khác, hoạt động
"singleInstance"
không cho phép bất kỳ hoạt động nào khác tham gia vào tác vụ. Đó phải là hoạt động duy nhất trong tác vụ. Nếu nó bắt đầu một hoạt động khác, thì hoạt động đó sẽ được gán cho một tác vụ khác, như thểFLAG_ACTIVITY_NEW_TASK
nằm trong ý định.Trường hợp sử dụng Chế độ chạy Nhiều thực thể? Nhận xét Các lần chạy thông thường cho hầu hết các hoạt động "standard"
Có Mặc định. Hệ thống luôn tạo một thực thể mới của hoạt động trong tác vụ mục tiêu và chuyển ý định đến đó. "singleTop"
Có điều kiện Nếu một thực thể hoạt động đã tồn tại ở đầu tác vụ mục tiêu, hệ thống sẽ chuyển ý định đến thực thể đó thông qua lệnh gọi phương thức onNewIntent()
, thay vì tạo một thực thể mới của hoạt động.Các lần chạy chuyên dụng
(không khuyến nghị cho việc sử dụng chung)"singleTask"
Có điều kiện Hệ thống tạo hoạt động vào thư mục gốc của một việc cần làm mới hoặc định vị hoạt động trong một việc cần làm hiện có bằng cùng một đối tượng chung sở thích. Nếu một thực thể của hoạt động đã tồn tại và ở cấp độ gốc của tác vụ, thì hệ thống sẽ chuyển ý định đến thực thể hiện có thông qua lệnh gọi đến phương thức onNewIntent()
, thay vì tạo một thực thể mới."singleInstance"
Không Giống như "singleTask"
, ngoại trừ việc hệ thống không đưa bất kỳ hoạt động nào khác vào tác vụ đang giữ thực thể đó. Hoạt động luôn là thành phần đơn nhất và duy nhất trong tác vụ của nó."singleInstancePerTask"
Có điều kiện Hoạt động chỉ có thể chạy dưới dạng hoạt động gốc của tác vụ (hoạt động đầu tiên đã tạo tác vụ) và do đó chỉ có một thực thể duy nhất của hoạt động này trong tác vụ. Tuy nhiên, hệ thống có thể tạo thực thể cho hoạt động này nhiều lần trong các tác vụ khác nhau. Như hiển thị trong bảng trước, đó
"standard"
là chế độ mặc định và phù hợp với hầu hết các loại hoạt động."singleTop"
cũng là chế độ chạy phổ biến và hữu ích cho nhiều loại hoạt động. Các chế độ khác,"singleTask"
,"singleInstance"
và"singleInstancePerTask"
, không phù hợp với hầu hết các ứng dụng. Các chế độ này dẫn đến mô hình tương tác nhiều khả năng không quen thuộc với người dùng và rất khác so với hầu hết các ứng dụng khác.Bất kể chế độ chạy bạn chọn là gì, hãy đảm bảo thử nghiệm khả năng hữu dụng của hoạt động trong khi chạy và khi quay lại hoạt động đó từ các hoạt động và công việc khác bằng cách sử dụng nút Quay lại.
Để biết thêm thông tin về các chế độ chạy và hoạt động tương tác của các chế độ đó với cờ
Intent
, hãy xem phần Tác vụ và ngăn xếp lui.android:lockTaskMode
- Xác định cách hệ thống hiển thị hoạt động này khi thiết bị đang chạy trong chế độ khoá tác vụ.
Android có thể chạy các tác vụ ở chế độ chìm (immerse), kiểu kiosk, được gọi là chế độ khoá tác vụ. Khi hệ thống chạy ở chế độ khoá tác vụ, người dùng thiết bị thường không thể xem được thông báo, truy cập vào các ứng dụng không có trong danh sách cho phép, hoặc quay lại màn hình chính, trừ phi ứng dụng Home được thêm vào danh sách cho phép.
Chỉ các ứng dụng đã được trình kiểm soát chính sách thiết bị (DPC) đưa vào danh sách cho phép mới có thể chạy khi hệ thống đang ở chế độ khoá tác vụ. Tuy nhiên, hệ thống và các ứng dụng đặc quyền có thể chạy ở chế độ khoá tác vụ mà không cần được thêm vào danh sách cho phép.
Giá trị này có thể là một trong các giá trị chuỗi
R.attr.lockTaskMode
sau đây:Giá trị Nội dung mô tả "normal"
Giá trị mặc định. Đây là giá trị mặc định. Các tác vụ không chạy trong chế độ khoá tác vụ nhưng có thể được đặt ở đó bằng cách gọi startLockTask()
."never"
Các tác vụ không chạy trong chế độ
lockTask
và người dùng thiết bị không thể ghim các tác vụ này trên màn hình Gần đây.Lưu ý: Chế độ này chỉ dành cho hệ thống và các ứng dụng đặc quyền. Những ứng dụng không có đặc quyền có giá trị này được coi là
normal
."if_whitelisted"
Nếu DPC cho phép gói này bằng cách sử dụng DevicePolicyManager.setLockTaskPackages()
, thì chế độ này sẽ giống vớialways
, ngoại trừ việc hoạt động cần gọistopLockTask()
để có thể hoàn tất nếu đây là tác vụ bị khoá sau cùng. Nếu DPC không cho phép gói này, thì chế độ này giống vớinormal
."always"
Những tác vụ đã bị can thiệp vào hệ thống ở hoạt động này luôn chạy ở chế độ khoá tác vụ. Nếu hệ thống đã ở chế độ khoá tác vụ khi tác vụ này chạy, thì tác vụ mới sẽ được chạy ở trên tác vụ hiện tại. Những tác vụ đã chạy ở chế độ này có thể thoát khỏi chế độ khoá tác vụ bằng cách gọi
finish()
.Lưu ý: Chế độ này chỉ dành cho hệ thống và các ứng dụng đặc quyền. Những ứng dụng không có đặc quyền có giá trị này được coi là
normal
.Thuộc tính này được giới thiệu trong API cấp 23.
android:maxRecents
- Số lượng tác vụ tối đa đã bị can thiệp vào hệ thống ở hoạt động này trên màn hình Gần đây. Khi đạt đến số mục nhập này, hệ thống sẽ xoá thực thể được dùng gần đây nhất khỏi màn hình Gần đây. Giá trị hợp lệ là các số nguyên từ 1 đến 50 hoặc từ 1 đến 25 trên các thiết bị có bộ nhớ thấp. 0 là không hợp lệ. Giá trị mặc định là 16.
android:maxAspectRatio
Tỷ lệ khung hình tối đa mà hoạt động hỗ trợ. Nếu ứng dụng chạy trên một thiết bị có tỷ lệ khung hình rộng hơn, thì hệ thống sẽ tự động tạo hộp thư cho ứng dụng, khiến các phần màn hình không dùng để ứng dụng có thể chạy ở tỷ lệ khung hình tối đa đã chỉ định.
Tỷ lệ khung hình tối đa được biểu thị dưới dạng số thập phân của thương số là kết quả khi chia kích thước dài cho kích thước ngắn. Ví dụ: nếu tỷ lệ khung hình tối đa là 7:3, hãy đặt giá trị của thuộc tính này là 2.33.
Trên các thiết bị không dành để đeo, giá trị của thuộc tính này phải từ 1.33 trở lên. Trên thiết bị đeo, giá trị này phải từ 1.0 trở lên. Nếu không, hệ thống sẽ bỏ qua giá trị đã đặt.
Lưu ý: Thuộc tính này sẽ bị bỏ qua nếu hoạt động đã đặt
resizeableActivity
thành true (đúng) vì điều đó có nghĩa là hoạt động của bạn hỗ trợ mọi kích thước.Để biết thêm thông tin về thuộc tính này, hãy xem phần Khai báo tỷ lệ khung hình tối đa.
android:multiprocess
- Liệu hệ thống có thể chạy một thực thể của hoạt động trong quy trình của thành phần đã bắt đầu hoạt động đó hay không. Thuộc tính này sẽ là
"true"
nếu có thể và"false"
nếu không thể. Giá trị mặc định là"false"
.Thông thường, một thực thể mới của hoạt động được chạy trong quy trình của ứng dụng đã xác định thực thể đó, vì vậy, tất cả các thực thể của hoạt động đều chạy trong cùng một quy trình. Tuy nhiên, nếu bạn đặt cờ này thành
"true"
, các thực thể của hoạt động có thể chạy trong nhiều quy trình, cho phép hệ thống tạo các thực thể ở bất kỳ nơi nào chúng được sử dụng, miễn là bạn cho phép điều đó. Đây gần như là điều không cần thiết hoặc được mong muốn. android:name
- Tên của lớp triển khai hoạt động, một lớp con của
Activity
. Giá trị thuộc tính thường là một tên lớp đủ điều kiện, chẳng hạn như"com.example.project.ExtracurricularActivity"
. Tuy nhiên, nói ngắn gọn, nếu ký tự đầu tiên của tên là một dấu chấm, chẳng hạn như".ExtracurricularActivity"
, thì ký tự đó sẽ được thêm vào không gian tên được chỉ định trong tệpbuild.gradle
.Một khi bạn đã phát hành ứng dụng thì đừng thay đổi tên này, trừ trường hợp bạn đặt
android:exported="false"
. Không có giá trị mặc định. Bạn phải chỉ định tên. android:noHistory
- Liệu hoạt động có bị xoá khỏi ngăn xếp hoạt động và hoàn tất hay không bằng cách gọi phương thức
finish()
khi người dùng rời khỏi hoạt động và hoạt động không còn hiển thị trên màn hình. Thuộc tính này sẽ là"true"
nếu hoạt động được hoàn tất và là"false"
nếu hoạt động chưa hoàn tất. Giá trị mặc định là"false"
.Giá trị của
"true"
có nghĩa là hoạt động không để lại dấu vết trước đây. Hoạt động này không nằm trong ngăn xếp hoạt động của tác vụ, do đó, người dùng không thể quay lại hoạt động đó. Trong trường hợp này,onActivityResult()
sẽ không bao giờ được gọi nếu bạn bắt đầu một hoạt động khác cho một kết quả của hoạt động này.Thuộc tính này được giới thiệu trong API cấp 3.
android:parentActivityName
- Tên lớp phần tử gốc logic của hoạt động. Tên ở đây phải khớp với tên lớp bạn đã cung cấp cho thuộc tính
android:name
của phần tử<activity>
tương ứng.Hệ thống sẽ đọc thuộc tính này để xác định hoạt động nào cần bắt đầu khi người dùng nhấn vào nút mũi tên Lên trên thanh thao tác. Hệ thống cũng có thể sử dụng thông tin này để tổng hợp một ngăn xếp lui gồm các hoạt động bằng
TaskStackBuilder
.Để hỗ trợ API cấp 4 – 16, bạn cũng có thể khai báo hoạt động gốc với phần tử
<meta-data>
chỉ định một giá trị cho"android.support.PARENT_ACTIVITY"
:<activity android:name="com.example.app.ChildActivity" android:label="@string/title_child_activity" android:parentActivityName="com.example.app.MainActivity" > <!-- Parent activity meta-data to support API level 4+ --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.app.MainActivity" /> </activity>
Để biết thêm thông tin về việc khai báo hoạt động gốc hỗ trợ tính năng di chuyển Lên, hãy đọc phần Cho phép di chuyển lên.
Thuộc tính này đã được giới thiệu trong API cấp 16.
android:persistableMode
Xác định cách một thực thể của hoạt động được lưu giữ trong một tác vụ vùng chứa khi thiết bị khởi động lại.
Nếu hoạt động gốc của một tác vụ đã đặt giá trị của thuộc tính này thành
persistRootOnly
, thì chỉ hoạt động gốc mới được duy trì. Nếu không, các hoạt động cao hơn trong ngăn xếp lui của tác vụ sẽ được kiểm tra; các hoạt động đặt giá trị của thuộc tính này thànhpersistAcrossReboots
đều được giữ nguyên.Nếu sử dụng thuộc tính này, bạn phải đặt giá trị cho một trong các giá trị sau:
Giá trị Nội dung mô tả persistRootOnly
Giá trị mặc định. Khi hệ thống khởi động lại, tác vụ hoạt động sẽ được giữ nguyên, nhưng chỉ ý định chạy của hoạt động gốc được sử dụng.
Khi ý định chạy của ứng dụng tải hoạt động gốc của ứng dụng, hoạt động đó sẽ không nhận được đối tượng
PersistableBundle
. Do đó, bạn không nên sử dụngonSaveInstanceState()
để duy trì trạng thái hoạt động gốc của ứng dụng trong thời gian khởi động lại của thiết bị.Lưu ý: Giá trị thuộc tính này chỉ ảnh hưởng đến hành vi của ứng dụng nếu giá trị này được đặt trên hoạt động gốc của ứng dụng.
persistAcrossReboots
Trạng thái của hoạt động này vẫn được giữ nguyên cùng với trạng thái của từng hoạt động ở cao hơn trong ngăn xếp lui có thuộc tính
persistableMode
riêng được đặt thànhpersistAcrossReboots
. Nếu một hoạt động không đặt thuộc tínhpersistableMode
được đặt thànhpersistAcrossReboots
hoặc nếu hoạt động đó được chạy bằng cờIntent.FLAG_ACTIVITY_NEW_DOCUMENT
, thì hoạt động đó cùng tất cả hoạt động cao hơn ở ngăn xếp lui không được giữ nguyên.Khi một ý định tải một hoạt động có thuộc tính
persistableMode
được đặt thànhpersistAcrossReboots
trong ứng dụng của bạn, thì hoạt động đó sẽ nhận được một đối tượngPersistableBundle
trong phương thứconCreate()
. Do đó, bạn có thể dùngonSaveInstanceState()
để bảo toàn trạng thái của hoạt động khi thiết bị khởi động lại, miễn là thuộc tínhpersistableMode
của ứng dụng đó được đặt làpersistAcrossReboots
.Lưu ý: Giá trị thuộc tính này ảnh hưởng đến hoạt động của ứng dụng ngay cả khi giá trị đó được đặt trên một hoạt động khác không phải hoạt động gốc của ứng dụng.
persistNever
Trạng thái của hoạt động không được duy trì.
Lưu ý: Giá trị thuộc tính này chỉ ảnh hưởng đến hành vi của ứng dụng nếu giá trị này được đặt trên hoạt động gốc của ứng dụng.
Thuộc tính này giới thiệu trong API cấp độ 21.
android:permission
- Tên của quyền mà ứng dụng phải có để chạy hoạt động đó hoặc để phản hồi một ý định. Nếu phương thức gọi của
startActivity()
hoặcstartActivityForResult()
không được cấp quyền đã chỉ định, thì ý định của phương thức gọi đó sẽ không được gửi đến hoạt động.Nếu bạn không đặt thuộc tính này, thì quyền do thuộc tính
permission
của phần tử<application>
đặt sẽ áp dụng cho hoạt động. Nếu bạn không đặt thuộc tính nào, thì hoạt động sẽ không được bảo vệ bởi quyền.Để biết thêm thông tin về các quyền, hãy xem mục Quyền trong phần Tổng quan về tệp kê khai ứng dụng và Mẹo bảo mật.
android:process
Tên của quy trình mà hoạt động chạy trong đó. Thông thường, tất cả các thành phần của ứng dụng chạy bằng tên quy trình mặc định được tạo cho ứng dụng và bạn không cần phải sử dụng thuộc tính này. Tuy nhiên, nếu cần, bạn có thể ghi đè tên quy trình mặc định bằng thuộc tính này, cho phép bạn trải các thành phần ứng dụng trên nhiều quy trình.
Nếu tên gán cho thuộc tính này bắt đầu bằng dấu hai chấm (
:
), thì một quy trình mới (dành riêng cho ứng dụng) sẽ được tạo khi cần và hoạt động sẽ chạy trong quy trình đó.Nếu tên quy trình bắt đầu bằng một ký tự viết thường, thì hoạt động sẽ chạy trong một quy trình chung của tên đó, miễn hoạt động có quyền làm vậy. Điều này cho phép các thành phần trong nhiều ứng dụng dùng chung một quy trình, qua đó giúp giảm mức sử dụng tài nguyên.
Thuộc tính
process
của phần tử<application>
có thể đặt tên quy trình mặc định khác cho tất cả các thành phần.android:relinquishTaskIdentity
Liệu hoạt động có từ bỏ giá trị nhận dạng tác vụ của mình đối với một hoạt động phía trên nó trong ngăn xếp tác vụ. Một tác vụ có hoạt động gốc đã đặt thuộc tính này thành
"true"
sẽ thay thế cơ sởIntent
cùng với hoạt động tiếp theo trong tác vụ.Nếu hoạt động tiếp theo cũng đặt thuộc tính này thành
"true"
, thì hoạt động đó sẽ tạoIntent
cơ sở cho mọi hoạt động mà thuộc tính này chạy trong cùng một tác vụ. Tác vụ này sẽ tiếp tục cho từng hoạt động cho đến khi gặp một hoạt động có thuộc tính này được đặt thành"false"
. Giá trị mặc định là"false"
.Việc thuộc tính này được đặt thành
"true"
cũng sẽ cho phép hoạt động sử dụngActivityManager.TaskDescription
để thay đổi nhãn, màu sắc và biểu tượng trên màn hình Gần đây.android:requireContentUriPermissionFromCaller
-
Chỉ định các quyền cần thiết để khởi chạy hoạt động này khi truyền URI nội dung. Giá trị mặc định là
none
, nghĩa là không có là bắt buộc. Việc đặt thuộc tính này hạn chế hoạt động dựa trên quyền của phương thức gọi. Nếu người gọi không có các quyền cần thiết, thì việc bắt đầu hoạt động sẽ bị từ chối quaSecurityException
.Xin lưu ý rằng biện pháp thực thi này áp dụng cho các URI nội dung bên trong
Intent.getData()
!Intent.EXTRA_STREAM
, vàIntent.getClipData()
.Có thể là một giá trị chuỗi, sử dụng '\\;' để thoát các ký tự thoát như '\\n' hoặc "\\uxxxx" cho một ký tự Unicode;
Phải là một trong các giá trị không đổi sau đây.
Hằng số Giá trị Mô tả none 0 Mặc định, không yêu cầu quyền cụ thể. đọc 1 Thực thi phương thức gọi để có quyền đọc các URI nội dung đã truyền. đọc và ghi 4 Thực thi phương thức gọi phải có cả quyền đọc và ghi vào các URI nội dung đã truyền. đọc hoặcViết 3 Thực thi phương thức gọi phải có quyền đọc hoặc ghi vào các URI nội dung đã truyền. ghi 2 Thực thi phương thức gọi để có quyền ghi vào các URI nội dung đã truyền. android:resizeableActivity
-
Chỉ định việc ứng dụng có hỗ trợ chế độ nhiều cửa sổ hay không. Bạn có thể đặt thuộc tính này trong phần tử
<activity>
hoặc<application>
.Nếu bạn đặt thuộc tính này thành
"true"
, thì người dùng có thể chạy hoạt động ở chế độ chia đôi màn hình và chế độ biểu mẫu tuỳ ý. Nếu bạn đặt thuộc tính thành"false"
, thì hệ thống sẽ không thể kiểm thử hoặc tối ưu hoá ứng dụng cho môi trường nhiều cửa sổ. Hệ thống vẫn có thể đưa hoạt động vào chế độ nhiều cửa sổ khi đã áp dụng chế độ tương thích.Việc đặt thuộc tính này thành
"false"
không đảm bảo rằng sẽ không có ứng dụng nào khác ở chế độ nhiều cửa sổ hiển thị trên màn hình (chẳng hạn như ở chế độ hình trong hình) hoặc trên màn hình khác. Do đó, việc đặt cờ này không có nghĩa là ứng dụng của bạn có quyền truy cập độc quyền vào tài nguyên.Nếu ứng dụng của bạn nhắm mục tiêu đến API cấp 24 trở lên và bạn không chỉ định giá trị cho thuộc tính này, thì giá trị của thuộc tính này sẽ được đặt mặc định thành
"true"
.Nếu ứng dụng của bạn nhắm mục tiêu đến API cấp 31 trở lên, thì thuộc tính này sẽ hoạt động theo cách khác nhau trên màn hình nhỏ và lớn:
- Màn hình lớn (sw >= 600dp): tất cả các ứng dụng đều hỗ trợ chế độ nhiều cửa sổ. Thuộc tính này cho biết liệu ứng dụng có thể đổi kích thước hay không (chứ không phải ứng dụng có hỗ trợ chế độ nhiều cửa sổ hay không). Nếu
resizeableActivity="false"
, ứng dụng sẽ được đưa vào chế độ tương thích khi cần thiết để phù hợp với kích thước màn hình. - Màn hình nhỏ (sw < 600dp): Nếu
resizeableActivity="true"
và chiều rộng cũng như chiều cao tối thiểu của hoạt động nằm trong phạm vi yêu cầu nhiều cửa sổ, thì ứng dụng sẽ hỗ trợ chế độ nhiều cửa sổ. NếuresizeableActivity="false"
, ứng dụng sẽ không hỗ trợ chế độ nhiều cửa sổ bất kể chiều rộng và chiều cao tối thiểu của hoạt động là như thế nào.
Lưu ý: Nhà sản xuất thiết bị có thể ghi đè hành vi của API cấp 31.
Thuộc tính này đã được thêm vào API cấp độ 24.
Lưu ý: Giá trị hoạt động gốc của một tác vụ được áp dụng cho mọi hoạt động bổ sung được chạy trong tác vụ đó. Tức là nếu có thể đổi kích thước hoạt động gốc của một tác vụ, thì hệ thống sẽ coi tất cả các hoạt động khác trong tác vụ đó là có thể đổi kích thước. Nếu hoạt động gốc không thể đổi kích thước, thì các hoạt động khác trong tác vụ đó cũng không thể đổi kích thước.
- Màn hình lớn (sw >= 600dp): tất cả các ứng dụng đều hỗ trợ chế độ nhiều cửa sổ. Thuộc tính này cho biết liệu ứng dụng có thể đổi kích thước hay không (chứ không phải ứng dụng có hỗ trợ chế độ nhiều cửa sổ hay không). Nếu
android:screenOrientation
Hướng được yêu cầu của hoạt động.
Khi một hoạt động lấp đầy toàn bộ màn hình, hướng được yêu cầu sẽ đóng vai trò là một đề xuất thay đổi hướng trên màn hình đó để khớp với giá trị được yêu cầu. Điều này có thể dẫn đến hướng khác với hướng thực của màn hình trong không gian, đòi hỏi người dùng xoay thiết bị để tiếp tục sử dụng ứng dụng. Trên Android 12 (cấp độ API) 31) trở lên, nhà sản xuất thiết bị có thể định cấu hình từng thiết bị màn hình (chẳng hạn như màn hình có kích thước máy tính bảng của thiết bị có thể gập lại) để bỏ qua đề xuất này và thay vào đó, buộc một hoạt động được tạo hiệu ứng hòm thư theo hướng ưu tiên của người dùng trong thiết bị. Chiến dịch này dẫn đến hướng của hoạt động khớp với hướng được yêu cầu mà không cần người dùng xoay thiết bị của họ theo cách vật lý.
Ở chế độ nhiều cửa sổ, hướng được yêu cầu không đóng vai trò là đề xuất cho phần tổng thể hướng. Nếu hoạt động là hộp thư, thông tin được yêu cầu hướng tác động đến hiệu ứng hòm thư được áp dụng cho hoạt động.
Giá trị có thể là bất kỳ chuỗi nào trong số các chuỗi sau:
"unspecified"
Giá trị mặc định. Hệ thống sẽ chọn hướng. Chính sách mà hệ thống sẽ sử dụng và do đó, các lựa chọn được đưa ra trong các bối cảnh cụ thể có thể khác nhau tuỳ theo thiết bị. "behind"
Hướng tương tự như hoạt động ngay bên dưới trong ngăn xếp hoạt động. "landscape"
Hướng ngang (màn hình có chiều rộng lớn hơn chiều cao). "portrait"
Hướng dọc (màn hình có chiều cao lớn hơn chiều rộng). "reverseLandscape"
Hướng ngang theo hướng đối diện hướng ngang thông thường. Đã thêm trong API cấp 9. "reversePortrait"
Hướng dọc theo hướng đối diện với hướng dọc thông thường. Đã thêm trong API cấp 9. "sensorLandscape"
Hướng ngang, nhưng có thể là ngang thông thường hoặc ngang đảo ngược tuỳ theo cảm biến thiết bị. Cảm biến được sử dụng ngay cả khi người dùng đã khoá tuỳ chọn xoay dựa trên cảm biến. Đã thêm trong API cấp 9. "sensorPortrait"
Hướng dọc, nhưng có thể là dọc thông thường hoặc dọc đảo ngược tuỳ theo cảm biến thiết bị. Cảm biến được sử dụng ngay cả khi người dùng đã khoá tuỳ chọn xoay dựa trên cảm biến. Tuy nhiên, tuỳ thuộc vào cấu hình thiết bị, thao tác xoay ngược có thể không được phép. Đã thêm trong API cấp 9. "userLandscape"
Hướng ngang, nhưng có thể là ngang thông thường hoặc ngang đảo ngược tuỳ theo cảm biến thiết bị và lựa chọn ưu tiên của người dùng. Đã thêm trong API cấp 18. "userPortrait"
Hướng dọc, nhưng có thể là dọc thông thường hoặc dọc đảo ngược tuỳ theo cảm biến thiết bị và lựa chọn ưu tiên của người dùng. Tuy nhiên, tuỳ thuộc vào cấu hình thiết bị, thao tác xoay ngược có thể không được phép. Đã thêm trong API cấp 18. "sensor"
Cảm biến hướng của thiết bị xác định hướng. Hướng của màn hình phụ thuộc vào cách người dùng đang cầm thiết bị. Hướng này thay đổi khi người dùng xoay thiết bị. Mặc dù vậy, theo mặc định, một số thiết bị không xoay sang cả 4 hướng có thể. Để sử dụng cả 4 hướng, hãy dùng "fullSensor"
. Cảm biến được sử dụng ngay cả khi người dùng đã khoá tuỳ chọn xoay trên cảm biến."fullSensor"
Cảm biến hướng của thiết bị xác định hướng cho bất kỳ hướng nào trong 4 hướng. Thuộc tính này tương tự như "sensor"
, ngoại trừ cho phép sử dụng bất kỳ hướng nào trong số 4 hướng mà màn hình có thể có, bất kể thiết bị thường hỗ trợ hướng nào. Chẳng hạn như một số thiết bị thường không sử dụng hướng dọc đảo ngược hoặc hướng ngang đảo ngược, nhưng thuộc tính này cho phép các hướng đó. Đã thêm trong API cấp 9."nosensor"
Hướng được xác định mà không cần tham chiếu đến cảm biến hướng thực. Cảm biến sẽ bị bỏ qua, vì vậy, màn hình sẽ không xoay theo cách người dùng di chuyển thiết bị. "user"
Hướng ưa thích hiện tại của người dùng. "fullUser"
Nếu người dùng đã khoá tính năng xoay dựa trên cảm biến, thì thuộc tính này sẽ hoạt động giống như user
, hoặc nếu người dùng không khoá thì thuộc tính này sẽ hoạt động giống nhưfullSensor
và cho phép sử dụng bất kỳ hướng nào trong 4 hướng màn hình có thể có. Đã thêm trong API cấp 18."locked"
Khoá hướng xoay hiện tại bất kể hướng gì.Đã thêm vào API cấp 18. Lưu ý: Khi bạn khai báo một trong các giá trị ngang hoặc dọc, giá trị này được xem là một yêu cầu bắt buộc đối với hướng mà hoạt động chạy theo đó. Giá trị bạn khai báo sẽ bật cơ chế lọc theo dịch vụ, chẳng hạn như Google Play, vì vậy, ứng dụng của bạn chỉ được cung cấp cho các thiết bị hỗ trợ hướng mà hoạt động yêu cầu. Ví dụ: nếu bạn khai báo
"landscape"
,"reverseLandscape"
hoặc"sensorLandscape"
, thì ứng dụng của bạn sẽ chỉ được cung cấp cho các thiết bị hỗ trợ hướng ngang.Ngoài ra, hãy khai báo rõ ràng rằng ứng dụng yêu cầu hướng dọc hoặc ngang bằng Phần tử
<uses-feature>
, chẳng hạn như<uses-feature android:name="android.hardware.screen.portrait"/>
. Đây là hành vi lọc do Google Play và các dịch vụ khác cung cấp. Bản thân nền tảng này không kiểm soát việc ứng dụng của bạn có thể cài đặt khi một thiết bị chỉ hỗ trợ một số hướng nhất định hay không.android:showForAllUsers
-
Liệu hoạt động có hiển thị khi người dùng hiện tại của thiết bị không phải là người dùng đã chạy hoạt động đó hay không. Bạn có thể đặt thuộc tính này thành một giá trị cố định, chẳng hạn như
"true"
hoặc"false"
hoặc đặt thuộc tính này thành thuộc tính tài nguyên hoặc giao diện chứa giá trị boolean.Thuộc tính này đã được thêm vào API cấp 23.
android:stateNotNeeded
- Liệu hoạt động có thể bị chấm dứt và khởi động lại thành công hay không khi không lưu trạng thái của hoạt động đó. Thuộc tính này sẽ là
"true"
nếu có thể khởi động lại mà không tham chiếu đến trạng thái trước đó và là"false"
nếu bắt buộc phải có trạng thái trước đó. Giá trị mặc định là"false"
.Thông thường, trước khi một hoạt động bị tắt tạm thời để tiết kiệm tài nguyên, phương thức
onSaveInstanceState()
của hoạt động đó sẽ được gọi. Phương thức này lưu trữ trạng thái hiện tại của hoạt động trong một đối tượngBundle
, đối tượng này sau đó được chuyển đếnonCreate()
khi hoạt động được khởi động lại. Nếu bạn đặt thuộc tính này thành"true"
,onSaveInstanceState()
có thể không được gọi vàonCreate()
được chuyểnnull
thay vìBundle
, như khi hoạt động bắt đầu lần đầu tiên.Việc đặt
"true"
có nghĩa là hoạt động có thể được khởi động lại mà không có trạng thái được lưu giữ. Ví dụ: hoạt động hiển thị Màn hình chính sử dụng chế độ cài đặt này để đảm bảo hoạt động không bị xoá nếu gặp sự cố vì lý do nào đó. android:supportsPictureInPicture
-
Chỉ rõ liệu hoạt động có hỗ trợ chế độ hiển thị hình trong hình hay không.
android:taskAffinity
Tác vụ mà hoạt động có đối tượng tương đồng. Về mặt lý thuyết, các hoạt động có cùng đối tượng tương đồng (affinity) thuộc về cùng một tác vụ (đối với cùng một "ứng dụng" từ quan điểm của người dùng). Đối tượng tương đồng của một tác vụ được xác định bằng đối tượng tương đồng của hoạt động gốc.
Đối tượng tương đồng xác định hai thứ, đó là: tác vụ mà hoạt động được gán lại cấp độ gốc (xem thuộc tính
allowTaskReparenting
) và tác vụ chứa hoạt động khi tác vụ chạy bằng cờFLAG_ACTIVITY_NEW_TASK
.Theo mặc định, tất cả các hoạt động trong một ứng dụng đều có cùng đối tượng tương đồng. Bạn có thể đặt thuộc tính này để nhóm các hoạt động theo cách khác và thậm chí đặt các hoạt động được xác định trong các ứng dụng vào cùng một tác vụ. Để chỉ định hoạt động không có đối tượng tương đồng cho bất kỳ tác vụ nào, hãy đặt hoạt động đó thành một chuỗi trống.
Nếu bạn không đặt thuộc tính này, thì hoạt động sẽ kế thừa đối tượng tương đồng được đặt cho ứng dụng. Hãy xem thuộc tính
taskAffinity
của phần tử<application>
. Tên của đối tượng tương đồng mặc định cho một ứng dụng là không gian tên được đặt trong tệpbuild.gradle
.android:theme
- Đây là thuộc tính tham chiếu đến tài nguyên kiểu để xác định giao diện chung của hoạt động.
Thuộc tính này sẽ tự động đặt ngữ cảnh của hoạt động để sử dụng
theme
này và cũng có thể khiến ảnh động "bắt đầu" trước khi hoạt động chạy (nhằm phù hợp hơn với hình thức thực sự của hoạt động).Nếu bạn không đặt thuộc tính này, thì nhìn chung, hoạt động sẽ kế thừa giao diện được đặt cho ứng dụng, từ thuộc tính
theme
của phần tử<application>
. Nếu thuộc tính đó cũng không được đặt, thì giao diện mặc định của hệ thống sẽ được sử dụng. Để biết thêm thông tin, hãy xem phần Kiểu và giao diện. android:uiOptions
Các lựa chọn bổ sung cho giao diện người dùng của một hoạt động. Phải là một trong các giá trị sau đây.
Giá trị Nội dung mô tả "none"
Không có tuỳ chọn bổ sung cho giao diện người dùng. Đây là lựa chọn mặc định. "splitActionBarWhenNarrow"
Thêm một thanh ở cuối màn hình để hiển thị các mục hành động trong thanh ứng dụng (còn gọi là thanh thao tác) khi bị hạn chế về không gian ngang (chẳng hạn như khi ở chế độ dọc trên điện thoại di động). Thay vì một số ít mục hành động xuất hiện trong thanh ứng dụng ở đầu màn hình, thanh ứng dụng sẽ được chia thành phần điều hướng ở trên cùng và mục hành động ở thanh dưới cùng. Việc này giúp đảm bảo một lượng không gian hợp lý được cung cấp không chỉ cho các mục hành động mà còn cho các phần tử điều hướng và tiêu đề ở trên cùng. Các mục trong trình đơn không được chia thành 2 thanh. Chúng luôn xuất hiện cùng nhau. Để biết thêm thông tin về thanh ứng dụng, hãy xem phần Thêm thanh ứng dụng.
Thuộc tính này đã được thêm vào API cấp 14.
android:windowSoftInputMode
- Cách cửa sổ chính của hoạt động tương tác với cửa sổ chứa bàn phím mềm trên màn hình. Việc đặt giá trị cho thuộc tính này ảnh hưởng đến 2 điều:
- Liệu bàn phím mềm sẽ bị ẩn hay hiển thị khi hoạt động trở thành tiêu điểm chú ý của người dùng.
- Liệu cửa sổ chính của hoạt động có thu nhỏ để tạo không gian cho bàn phím mềm hoặc không gian cho nội dung của cửa sổ hay không, để bạn có thể nhìn thấy tiêu điểm hiện tại khi một phần của cửa sổ bị che khuất bởi bàn phím mềm.
Giá trị bạn đặt phải là một trong các giá trị được liệt kê trong bảng sau đây hoặc là sự kết hợp của một giá trị
"state..."
với một giá trị"adjust..."
. Việc đặt nhiều giá trị trong một trong hai nhóm, chẳng hạn như nhiều giá trị"state..."
, sẽ cho ra kết quả không xác định. Các giá trị riêng lẻ được phân tách bằng dấu gạch đứng (|
), như trong ví dụ sau:<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >
Các giá trị được đặt tại đây (ngoài
"stateUnspecified"
và"adjustUnspecified"
) sẽ ghi đè các giá trị được đặt trong giao diện.Giá trị Nội dung mô tả "stateUnspecified"
Không chỉ định việc liệu bàn phím mềm sẽ ẩn hay hiện. Hệ thống sẽ chọn một trạng thái thích hợp hoặc dựa vào chế độ cài đặt trong giao diện. Đây là chế độ cài đặt mặc định cho hành vi của bàn phím mềm.
"stateUnchanged"
Bàn phím mềm sẽ duy trì trạng thái sau cùng (hiện hoặc ẩn) khi hoạt động xuất hiện ở vị trí dễ thấy. "stateHidden"
Bàn phím mềm bị ẩn khi người dùng chọn hoạt động – nghĩa là khi người dùng khẳng định sẽ chuyển đến hoạt động thay vì quay lại hoạt động vào thời điểm rời khỏi một hoạt động khác. "stateAlwaysHidden"
Bàn phím mềm luôn ẩn khi cửa sổ chính của hoạt động có tiêu điểm nhập. "stateVisible"
Bàn phím mềm sẽ hiện khi người dùng chọn hoạt động – tức là khi người dùng khẳng định sẽ chuyển đến hoạt động thay vì quay lại hoạt động vào thời điểm rời khỏi một hoạt động khác. "stateAlwaysVisible"
Bàn phím mềm sẽ hiện khi cửa sổ nhận được tiêu điểm nhập. "adjustUnspecified"
Không chỉ định việc liệu cửa sổ chính của hoạt động có đổi kích thước để tạo chỗ trống cho bàn phím mềm hay cho nội dung của cửa sổ hay không để cho phép hiển thị tiêu điểm hiện tại trên màn hình. Hệ thống sẽ tự động chọn một trong các chế độ này, tuỳ thuộc vào việc nội dung của cửa sổ có bất kỳ khung hiển thị bố cục có thể cuộn nội dung nào hay không. Nếu có khung hiển thị đó, thì cửa sổ sẽ được đổi kích thước với giả định thao tác cuộn có thể khiến tất cả nội dung của cửa sổ hiển thị ở khu vực nhỏ hơn. Đây là chế độ cài đặt mặc định cho hành vi của cửa sổ chính.
"adjustResize"
Cửa sổ chính của hoạt động luôn được đổi kích thước để tạo không gian cho bàn phím mềm trên màn hình. "adjustPan"
Cửa sổ chính của hoạt động không được đổi kích thước để tạo không gian cho bàn phím mềm. Thay vào đó, các nội dung trong cửa sổ sẽ tự động được kéo để sao cho tiêu điểm hiện tại không bị che khuất bởi bàn phím và người dùng luôn có thể xem nội dung họ đang nhập. Nhìn chung, bạn sẽ ít khi muốn thực hiện việc này hơn so với việc đổi kích thước vì người dùng có thể cần đóng bàn phím mềm để truy cập và tương tác với những phần bị che khuất của cửa sổ. Thuộc tính này được giới thiệu trong API cấp 3.
- được giới thiệu trong:
- API cấp 1 cho tất cả các thuộc tính, ngoại trừ
noHistory
vàwindowSoftInputMode
được thêm trong API cấp 3. - xem thêm:
<application>
<activity-alias>
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2024-07-24 UTC.
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Thiếu thông tin tôi cần"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Quá phức tạp/quá nhiều bước"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Đã lỗi thời"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Vấn đề về bản dịch"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Vấn đề về mẫu/mã"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Khác"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Dễ hiểu"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Giúp tôi giải quyết được vấn đề"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Khác"
}]
{
"last_modified": "Cập nhật lần gần đây nhất: 2024-07-24 UTC.",
"state": ""
}