Sổ tay nấu ăn trên màn hình lớn

Stay organized with collections Save and categorize content based on your preferences.

Android cung cấp mọi nguyên liệu cho ứng dụng màn hình lớn năm sao. Công thức trong sổ tay nấu ăn này đã chọn lọc và kết hợp các nguyên liệu được lựa chọn để giải quyết những vấn đề cụ thể cần phát triển. Mỗi công thức đều là những phương pháp hay nhất, mẫu mã chất lượng và hướng dẫn từng bước, giúp bạn trở thành một đầu bếp hàng đầu trên màn hình lớn này.

Xếp hạng theo sao

Các công thức được xếp hạng sao dựa trên mức độ phù hợp với nguyên tắc về Chất lượng trên ứng dụng màn hình lớn.

Xếp hạng 5 sao Đáp ứng tiêu chí Cấp 1, phân biệt màn hình lớn
Xếp hạng 4 sao Đáp ứng tiêu chí Cấp 2, màn hình lớn được tối ưu hoá
Xếp hạng 3 sao Đáp ứng tiêu chí Cấp 3, màn hình lớn đã sẵn sàng
Xếp hạng 2 sao Cung cấp một số chức năng trên màn hình lớn, nhưng không đáp ứng được các nguyên tắc về chất lượng đối với ứng dụng màn hình lớn
Xếp hạng 1 sao Đáp ứng nhu cầu của một trường hợp sử dụng cụ thể, nhưng không hỗ trợ đúng cách cho màn hình lớn

Hỗ trợ máy ảnh của Chromebook

Xếp hạng 3 sao

Thu hút sự chú ý của người dùng Chromebook trên Google Play.

Nếu ứng dụng máy ảnh của bạn chỉ hoạt động với các tính năng máy ảnh cơ bản, đừng để cửa hàng ứng dụng ngăn người dùng Chromebook cài đặt ứng dụng chỉ vì bạn vô tình chỉ định các tính năng máy ảnh nâng cao trên điện thoại cao cấp.

Chromebook tích hợp sẵn máy ảnh mặt trước (hướng về phía người dùng) phù hợp với ứng dụng hội nghị truyền hình, ảnh chụp nhanh và các ứng dụng khác. Tuy nhiên, không phải Chromebook nào cũng có máy ảnh mặt sau (hướng ra ngoài), đồng thời hầu hết máy ảnh mặt trước của người dùng trên Chromebooks đều không hỗ trợ tính năng tự động lấy nét hoặc đèn flash.

Các phương pháp hay nhất

Các ứng dụng máy ảnh linh hoạt hỗ trợ tất cả các thiết bị, bất kể cấu hình máy ảnh như thiết bị có máy ảnh trước, máy ảnh sau, máy ảnh bên ngoài được kết nối bằng USB.

Để đảm bảo các cửa hàng ứng dụng cung cấp ứng dụng của bạn cho nhiều thiết bị nhất, hãy luôn khai báo tất cả các tính năng của máy ảnh mà ứng dụng dùng và cho biết rõ các tính năng đó có bắt buộc hay không.

Thành phần

  • Quyền CAMERA — Cấp cho ứng dụng của bạn quyền truy cập vào máy ảnh của thiết bị
  • Phần tử tệp kê khai <uses-feature> — Thông báo cho cửa hàng ứng dụng về những tính năng mà ứng dụng sử dụng
  • Thuộc tính required — Cho các cửa hàng ứng dụng biết liệu ứng dụng có thể hoạt động mà không cần chỉ định tính năng nào hay không

Các bước

Tóm tắt

Khai báo quyền sử dụng CAMERA Khai báo các tính năng của máy ảnh hỗ trợ máy ảnh cơ bản. Xác định xem mỗi tính năng có bắt buộc hay không

1. Khai báo quyền sử dụng CAMERA

Thêm quyền sau đây vào tệp kê khai ứng dụng:

<uses-permission android:name="android.permission.CAMERA" />
2. Khai báo các tính năng cơ bản của máy ảnh

Thêm các tính năng sau vào tệp kê khai ứng dụng:

<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
3. Xác định xem mỗi tính năng có bắt buộc hay không

Đặt android:required="false" cho tính năng android.hardware.camera.any để cho phép truy cập vào ứng dụng của bạn bằng các thiết bị có tích hợp bất kỳ loại máy ảnh nào hoặc máy ảnh bên ngoài — hoặc hoàn toàn không có máy ảnh nào.

Đối với các tính năng khác, hãy đặt android:required="false" để đảm bảo các thiết bị như Chromebook không có máy ảnh mặt sau, không có tính năng tự động lấy nét hoặc đèn flash có thể truy cập vào ứng dụng của bạn trên các cửa hàng ứng dụng.

Kết quả

Người dùng Chromebook có thể tải và cài đặt ứng dụng của bạn từ Google Play và các cửa hàng ứng dụng khác. Các thiết bị hỗ trợ máy ảnh đầy đủ tính năng như điện thoại sẽ không bị hạn chế về chức năng của máy ảnh.

Bằng cách đặt rõ các tính năng máy ảnh mà ứng dụng của bạn hỗ trợ và chỉ định các tính năng mà ứng dụng yêu cầu, bạn đã cung cấp ứng dụng cho nhiều thiết bị nhất có thể.

Tài nguyên khác

Để biết thêm thông tin, hãy xem nội dung Các tính năng phần cứng của máy ảnh trong tài liệu <uses-feature>.

Hướng ứng dụng bị hạn chế trên điện thoại nhưng không bị hạn chế trên các thiết bị màn hình lớn

Xếp hạng 2 sao

Ứng dụng của bạn hoạt động tốt trên điện thoại ở hướng dọc, vậy nên bạn hạn chế ứng dụng chỉ ở chế độ dọc. Tuy nhiên, bạn có thể làm được nhiều việc hơn trên màn hình lớn theo hướng ngang.

Làm thế nào để bạn có thể sử dụng theo cả hai cách - nghĩa là hạn chế ứng dụng ở hướng dọc trên màn hình nhỏ, nhưng vẫn bật được hướng ngang trên màn hình lớn?

Các phương pháp hay nhất

Một ứng dụng tối ưu luôn tôn trọng các lựa chọn ưu tiên của người dùng, chẳng hạn như hướng thiết bị.

Theo nguyên tắc về chất lượng ứng dụng màn hình lớn, các ứng dụng sẽ hỗ trợ tất cả các cấu hình thiết bị, bao gồm cả hướng dọc và ngang, chế độ nhiều cửa sổ, cũng như các trạng thái gập và mở của thiết bị có thể gập lại. Ứng dụng phải tối ưu hoá bố cục và giao diện người dùng cho các cấu hình khác nhau, đồng thời phải lưu và khôi phục trạng thái trong quá trình thay đổi cấu hình.

Công thức này chỉ là một giải pháp tạm thời — một khoảng nhỏ hỗ trợ màn hình lớn. Sử dụng công thức này cho đến khi bạn có thể cải thiện ứng dụng của mình để cung cấp hỗ trợ đầy đủ cho tất cả các cấu hình thiết bị.

Thành phần

  • screenOrientation: Tuỳ chọn cài đặt tệp kê khai ứng dụng cho phép bạn chỉ định cách ứng dụng của bạn phản hồi các thay đổi về hướng trên thiết bị
  • Jetpack WindowManager: Thư viện cho phép bạn xác định kích thước và tỷ lệ khung hình của cửa sổ ứng dụng; khả năng tương thích ngược với API cấp 14
  • Activity#setRequestedOrientation(): Phương thức mà bạn có thể thay đổi hướng ứng dụng trong thời gian chạy

Các bước

Tóm tắt

Cho phép ứng dụng xử lý các thay đổi về hướng theo mặc định trong tệp kê khai ứng dụng. Trong thời gian chạy, hãy xác định kích thước cửa sổ ứng dụng. Nếu cửa sổ ứng dụng nhỏ, hãy hạn chế hướng ứng dụng bằng cách ghi đè chế độ cài đặt hướng của tệp kê khai.

1. Chỉ định tuỳ chọn cài đặt hướng trong tệp kê khai ứng dụng

Đặt phần tử screenOrientation của tệp kê khai ứng dụng thành fullUser. Nếu người dùng chưa khoá chế độ xoay dựa trên cảm biến, ứng dụng của bạn sẽ hỗ trợ tất cả các hướng của thiết bị.

<activity
    android:name=".MyActivity"
    android:screenOrientation="fullUser">

2. Xác định kích thước màn hình

Với tệp kê khai được đặt để hỗ trợ tất cả các hướng được người dùng cho phép, bạn có thể chỉ định hướng ứng dụng theo phương thức lập trình dựa trên kích thước màn hình.

Sử dụng phương thức WindowMetricsCalculator#computeMaximumWindowMetrics() của thư viện Jetpack WindowManager để lấy kích thước màn hình thiết bị dưới dạng đối tượng WindowMetrics. Bạn có thể so sánh các chỉ số của cửa sổ với lớp kích thước cửa sổ để quyết định thời điểm giới hạn hướng.

Lớp kích thước của Windows cung cấp các điểm ngắt giữa màn hình nhỏ và màn hình lớn. Kích thước nhỏ hơn (chiều rộng hoặc chiều cao) của điện thoại thông thường sẽ nhỏ hơn 600dp; kích thước nhỏ hơn của máy tính bảng và màn hình lớn có thể gập lại lớn hơn 600dp.

Sử dụng các giá trị dp điểm ngắt để xác định kích thước màn hình:

Kotlin

/** Determines whether the device has a compact screen. **/
fun compactScreen(): Boolean {
    val screenMetrics = WindowMetricsCalculator
                        .getOrCreate()
                        .computeMaximumWindowMetrics(this)
    val shortSide = min(screenMetrics.bounds.width(),
                        screenMetrics.bounds.height())
    return shortSide / resources.displayMetrics.density < 600
}

Java

/** Determines whether the device has a compact screen. **/
public boolean compactScreen() {
    WindowMetrics screenMetrics = WindowMetricsCalculator
                                  .getOrCreate()
                                  .computeMaximumWindowMetrics(this);
    int shortSide = Math.min(screenMetrics.getBounds().width(),
                             screenMetrics.getBounds().height());
    return shortSide / getResources().getDisplayMetrics().density < 600;
}
    Lưu ý:
  • Những ví dụ trên được triển khai dưới dạng phương thức của một hoạt động; và do đó, hoạt động được tham chiếu như this trong đối số của computeMaximumWindowMetrics().
  • Phương thức computeMaximumWindowMetrics() được dùng thay cho computeCurrentWindowMetrics(), vì bạn có thể chạy ứng dụng ở chế độ nhiều cửa sổ, nghĩa là bỏ qua chế độ cài đặt hướng màn hình. Chẳng có lý do gì phải xác định kích thước cửa sổ ứng dụng và ghi đè tuỳ chọn cài đặt hướng, trừ khi cửa sổ ứng dụng chiếm toàn bộ màn hình thiết bị.

Vui lòng xem WindowManager để biết hướng dẫn về cách khai báo các phần phụ thuộc nhằm cung cấp phương thức computeMaximumWindowMetrics() cho ứng dụng của bạn.

3. Ghi đè chế độ cài đặt trong tệp kê khai ứng dụng

Khi đã xác định thiết bị có kích thước màn hình thu gọn, bạn có thể gọi Activity#setRequestedOrientation() để ghi đè chế độ cài đặt screenOrientation của tệp kê khai:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    requestedOrientation = if (compactScreen())
        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT else
        ActivityInfo.SCREEN_ORIENTATION_FULL_USER
    ...
}

Java

@Override
protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstanceState);
    if (compactScreen()) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER);
    }
    ...
}

Bằng cách thêm logic vào phương thức onCreate(), bạn có thể thu được kích thước màn hình và ghi đè chế độ cài đặt hướng bất cứ khi nào hoạt động được tạo, chẳng hạn như sau khi xoay thiết bị, hoặc khi một thiết bị có thể gập lại được gập hoặc mở ra.

Kết quả

Ứng dụng của bạn vẫn nằm ở hướng dọc trên màn hình nhỏ bất kể thiết bị có xoay hướng nào. Trên màn hình lớn, ứng dụng sẽ hỗ trợ cả hướng ngang lẫn hướng dọc.

Tài nguyên khác

Để được trợ giúp về cách nâng cấp ứng dụng nhằm luôn có thể hỗ trợ tất cả cấu hình thiết bị, hãy xem các mục sau: