Trong Android 8.0, người dùng có thể chuyển đổi giữa chế độ tự động xoay và xoay dọc chế độ đó bằng ô Quicksettings hoặc Cài đặt hiển thị. Trong Android 9, chúng tôi đã cập nhật chế độ xoay dọc để loại bỏ các thao tác xoay không chủ ý bằng cách ghim xoay màn hình hiện tại ngay cả khi vị trí của thiết bị thay đổi. Người dùng có thể kích hoạt xoay theo cách thủ công khi cần bằng cách nhấn một nút mới trong thanh điều hướng. Chúng tôi đã đổi tên chế độ chân dung thành khoá xoay và chế độ này sẽ kích hoạt khi tự động xoay đã bị tắt. Không có thay đổi nào đối với chế độ tự động xoay.
Khi thiết bị ở chế độ khoá xoay, người dùng có thể khoá màn hình ở bất kỳ chế độ nào
chế độ xoay được hỗ trợ bởi Activity (Hoạt động trên cùng) hiển thị (theo hệ thống hiện tại)
hạn chế). Nếu Hoạt động trên cùng có thể hiển thị theo nhiều vòng xoay trong
chế độ tự động xoay, các tuỳ chọn tương tự sẽ có sẵn ở chế độ khoá xoay,
với một số ngoại lệ dựa trên screenOrientation
của Hoạt động
cài đặt.
Chế độ khoá xoay hoạt động bằng cách hiển thị một nút trong thanh điều hướng khi xoay thiết bị
thay đổi. Để thực hiện việc này, cảm biến hướng của thiết bị phải duy trì trạng thái hoạt động
ngay cả khi chế độ tự động xoay đang tắt. Thao tác nhấn vào nút này sẽ thiết lập chế độ xoay người dùng một cách hiệu quả
tùy chọn (Settings.System.USER_ROTATION
). WindowManager sử dụng
tùy chọn, cùng với các thông tin chi tiết khác về Hoạt động hàng đầu và trạng thái hệ thống,
để thay đổi hướng xoay của hệ thống. WindowManager tiếp tục sử dụng chế độ xoay người dùng
lựa chọn ưu tiên khi quyết định chế độ xoay nào sẽ kết xuất hệ thống khi di chuyển sang
một Hoạt động khác.
Bạn nên duy trì lựa chọn ưu tiên về xoay vòng người dùng khi di chuyển giữa các Hoạt động. Tuy nhiên, vì hầu hết người dùng điện thoại chỉ muốn ở chế độ ngang trong một khoảng thời gian ngắn, trong một khoảng thời gian tạm thời, chúng tôi đã bổ sung thêm yếu tố định hướng tự nhiên. Xoay người dùng lựa chọn ưu tiên là reset về hướng tự nhiên của thiết bị bất cứ khi nào xoay hệ thống sẽ thay đổi thành hướng tự nhiên của thiết bị. Đối với hầu hết các loại điện thoại, hướng tự nhiên của thiết bị là hướng dọc (0o). Đang đặt lại chế độ xoay vòng người dùng lựa chọn ưu tiên thường xảy ra khi dùng ứng dụng chỉ hiển thị theo hướng dọc, khoá điện thoại hoặc quay lại không gian làm việc của trình chạy.
Tương tác xoay vòng cho người dùng không thay đổi nhiều trong thập kỷ qua. Người dùng có thể sẽ khó khám phá tính năng này do lịch sử trước đó của chúng với chế độ xoay và vị trí của nút trong thanh điều hướng. Vì lý do này, chúng tôi đã thêm một chế độ giới thiệu cho nút xoay để làm nổi bật nút này khi nút xuất hiện. Đoạn mở đầu hành vi của chế độ chỉ xảy ra cho một số tương tác nút đầu tiên, sau đó đã tắt chế độ giới thiệu.
Nguồn
Đã thêm hỗ trợ cho đề xuất xoay Android 9. Hầu hết các thay đổi đều có trong các tệp sau đây.
services/.../server/policy/PhoneWindowManager.java
:- Các Móc tiêu thụ dữ liệu đầu ra của
WindowOrientationListener
(MyOrientationListener
, chịu trách nhiệm giám sát cảm biến để xác định xem thiết bị có được xoay không) - Duy trì hoạt động của
WindowOrientationListener
ngay cả khi chế độ tự động xoay đã bị tắt (xemneedSensorRunningLp()
) - Tính toán việc xoay hệ thống dựa trên tuỳ chọn xoay người dùng, ở trên cùng
Chế độ cài đặt hoạt động
screenOrientation
và trạng thái hệ thống (xemrotationForOrientationLw()
) - Xác định xem Hoạt động trên cùng có thể xoay theo một hướng xoay nhất định hay không (xem
isRotationChoicePossible()
)
- Các Móc tiêu thụ dữ liệu đầu ra của
SystemUI/.../statusbar/phone/NavigationBarFragment
:- Xác định xem nút thanh điều hướng có hiển thị khi xoay hay không
lệnh gọi lại đề xuất từ
PhoneWindowManager
(xemonRotationProposal()
) - Xử lý thời điểm ẩn nút xoay thanh điều hướng (xem các lệnh gọi đến
setRotateSuggestionButtonState(false)
) - Xử lý thời gian chờ của nút, bao gồm cả trường hợp đặc biệt khi thanh điều hướng bị ẩn (thường ở chế độ toàn màn hình)
- Đặt lại lựa chọn ưu tiên của người dùng khi thiết bị trở về chế độ tự nhiên
hướng (
mRotationWatcher
) - Chọn kiểu thích hợp cho ảnh động nút thanh điều hướng,
đã áp dụng trong
NavigationBarView
(xemonRotationProposal()
) - Thêm logic chế độ giới thiệu, bao gồm cả ảnh động chuyên biệt
(xem tài liệu tham khảo về
Settings.Secure.NUM_ROTATION_SUGGESTIONS_ACCEPTED
) - Triển khai cờ xoaydisable2 (xem
disable()
)
- Xác định xem nút thanh điều hướng có hiển thị khi xoay hay không
lệnh gọi lại đề xuất từ
SystemUI/.../statusbar/phone/NavigationBarView.java
:- Ảnh động biểu tượng nút kiểu để khớp với xoay vòng đang chờ xử lý (xem
updateRotateSuggestionButtonStyle()
) - Xử lý các thay đổi về chế độ hiển thị của nút (xem
setRotateButtonVisibility()
), bao gồm cả logic để ẩn nút xoay nếu một số dịch vụ Hỗ trợ tiếp cận đang hoạt động (tính theo thứ hạng ngăn xếp nút ngoài cùng bên phải của thanh điều hướng)
- Ảnh động biểu tượng nút kiểu để khớp với xoay vòng đang chờ xử lý (xem
SystemUI/res/layout/menu_ime.xml
:- Bao gồm một
KeyButtonView
mới cho nút xoay. xếp chồng lên trên trình đơn và bộ chọn IME/bàn phím nhưng ở phía dưới Nút hỗ trợ tiếp cận
- Bao gồm một
SystemUI/res/drawable/ic_sysbar_rotate_button.xml
:AnimatedVectorDrawable
phức tạp được dùng để tạo ảnh động nút xoay thanh điều hướng- Kiểu (trong
SystemUI/res/values/styles.xml
) được dùng để đặt góc xoay bắt đầu và kết thúc để đối tượng có thể vẽ được dùng để tạo hiệu ứng cho nhiều kiểu xoay bắt đầu và kết thúc - Tính năng phủ biểu tượng được thiết lập qua
TintedKeyButtonDrawable
Triển khai
Android 9 bao gồm tất cả các thay đổi cần thiết để đề xuất xoay vòng hoạt động cho các thiết bị sử dụng phím điều hướng phần mềm (quay lại, màn hình chính, v.v.).
Các nhà sản xuất thiết bị tạo ra thiết bị có phím điều hướng phần cứng để triển khai tính năng này sẽ cần thiết kế và triển khai Giao diện người dùng hệ thống riêng tương tác hoặc tắt tính năng này. Chúng tôi khuyến khích mọi nền tảng được giới thiệu dễ sử dụng khi giữ thiết bị ở góc 90o hoặc 180o so với hệ thống hiện tại và có thể truy cập nhanh chóng. Vì những lý do này, việc sử dụng thông báo Bạn không nên sử dụng (như cách làm cho IME/bộ chọn bàn phím).
Yêu cầu về phần cứng để sử dụng tính năng này cũng giống như yêu cầu để sử dụng chế độ tự động xoay.
Lựa chọn ưu tiên xoay vòng người dùng cần đảm bảo tính nhất quán trong quá trình triển khai
(Settings.System.USER_ROTATION
) được đặt lại về chế độ tự nhiên của thiết bị
xoay khi hệ thống thay đổi sang chế độ xoay tự nhiên của thiết bị vì bất kỳ lý do gì
khi chế độ tự động xoay đang tắt. Quy trình triển khai được cung cấp sẽ thực hiện việc này (xem
NavigationBarFragment.mRotationWatcher
).
Có một cờ mới trong StatusBarManager.disable2
để tạm thời
ngăn đề xuất xoay xuất hiện. Xem
StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS
. Cờ này phải
được tôn trọng trong tất cả các hoạt động triển khai vì được các ứng dụng hệ thống quan trọng sử dụng, bao gồm
Trình hướng dẫn thiết lập. Cách triển khai được cung cấp hỗ trợ điều này (xem
NavigationBarFragment.disable()
).
Bạn nên bật tính năng này và làm theo AOSP (Dự án nguồn mở Android) nếu có thể. Chúng tôi cố gắng giữ cho trải nghiệm xoay vòng tương tự giữa các thiết bị, phản ánh tính đồng nhất về trải nghiệm trên hầu hết điện thoại hiện nay giữa chế độ khoá tự động xoay và khoá chế độ dọc.
Tuỳ chỉnh
Vì đề xuất xoay chỉ xuất hiện ở chế độ khoá xoay (tự động xoay tắt),
bạn có thể chọn xem có bật tính năng này theo mặc định cho lượt cài đặt mới hay không bằng cách
chọn đặt chế độ tự động xoay theo mặc định. Xem
def_accelerometer_rotation
inch
SettingsProvider/res/values/defaults.xml
để thực hiện các thay đổi mặc định.
Người dùng có thể dễ dàng thay đổi nếu chế độ tự động xoay đang hoạt động hay không (bất kể chế độ mặc định) thông qua ô xoay trong phần Cài đặt nhanh hoặc Cài đặt màn hình.
Xác nhận kết quả
Để thử nghiệm, bạn có thể bật và tắt tính năng này bằng cách thay đổi một cổng
Giá trị Settings.Secure
. Điều này dễ dàng nhất được thực hiện bằng cách chạy
sau đây từ một phiên bản adb đặc quyền:
adb shell settings put secure show_rotation_suggestions <x>
Đặt x thành 0
để tắt và 1
để bật.
Để thử nghiệm, bạn có thể đặt lại chế độ giới thiệu bằng cách thay đổi
Giá trị Settings.Secure
. Điều này dễ dàng nhất được thực hiện bằng cách chạy
sau đây từ một phiên bản adb đặc quyền:
adb shell settings put secure num_rotation_suggestions_accepted 0