Làm nhiều việc cùng lúc với các thẻ tuỳ chỉnh một phần

Theo mặc định, Thẻ tuỳ chỉnh sẽ khởi chạy dưới dạng hoạt động toàn cửa sổ. Kể từ Chrome 107, bạn có thể sử dụng một phần Thẻ tuỳ chỉnh để chỉ định chiều cao khởi chạy khác ở chế độ dọc sao cho người dùng có thể làm nhiều việc cùng lúc bằng cách tương tác với ứng dụng trong khi xem nội dung trên web. Người dùng có thể mở rộng Thẻ tuỳ chỉnh ra toàn màn hình bằng cách kéo ô điều khiển của thanh công cụ lên và khôi phục chiều cao khởi chạy ban đầu bằng cách kéo ô điều khiển xuống.

Ảnh chụp màn hình một thẻ một phần của bảng dưới cùng
Một phần thẻ tuỳ chỉnh trong bảng dưới cùng.

Đối với màn hình lớn hoặc thiết bị ở chế độ ngang, kể từ Chrome 120, bạn có thể chỉ định chiều rộng khởi chạy tối đa để hiển thị một phần Thẻ tuỳ chỉnh trong một trang tính bên. Bằng cách đặt một điểm ngắt, bạn có thể quyết định thời điểm chạy một phần Thẻ tuỳ chỉnh trong bảng dưới cùng hoặc bảng bên.

Ảnh chụp màn hình một phần của trang tính bên
Một phần thẻ tuỳ chỉnh trong một trang tính bên.

Điều kiện tiên quyết

Để có thể sử dụng một phần Thẻ tuỳ chỉnh, bạn cần:

Kết hợp cả hai phương pháp nếu bạn muốn khởi động nhanh trong trường hợp kết nối dịch vụ chưa được thiết lập.

Định cấu hình bảng dưới cùng

Để chuyển Thẻ tuỳ chỉnh thành một phần Thẻ tuỳ chỉnh, hãy xác định chiều cao khởi chạy ban đầu tính bằng pixel bằng cách gọi phương thức setInitialActivityHeightPx() của lớp CustomTabBuilder. Theo mặc định, một phần Thẻ tuỳ chỉnh có thể đổi kích thước, nhưng bạn có thể chuyển ACTIVITY\_HEIGHT\_FIXED để vô hiệu hoá hành vi này:

new CustomTabsBuilder().setInitialActivityHeightPx(
    400,
    ACTIVITY_HEIGHT_FIXED
);

Định cấu hình trang tính bên

Để định cấu hình hoạt động của bảng bên, hãy xác định chiều rộng khởi chạy ban đầu tính bằng pixel bằng cách gọi phương thức setInitialActivityWidthPx() của lớp CustomTabBuilder.

Theo mặc định, một phần Thẻ tuỳ chỉnh có thể đổi kích thước, nhưng bạn có thể chuyển ACTIVITY\_HEIGHT\_FIXED để vô hiệu hoá hành vi này:

  CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder(session)
        .setInitialActivityHeightPx(400)
        .setInitialActivityWidthPx(400);
        .setActivitySideSheetBreakpointDp(800);

Thẻ tuỳ chỉnh sẽ hoạt động như một trang tính bên nếu chiều rộng của màn hình lớn hơn giá trị điểm ngắt do setActivitySideSheetBreakpointDp() đặt. Nếu chiều rộng của màn hình lớn hơn x, thì Thẻ tuỳ chỉnh sẽ hoạt động như một trang tính bên, nếu không, thẻ sẽ hoạt động như một bảng dưới cùng. Nếu không có điểm ngắt nào được chỉ định, hãy đặt cách triển khai trình duyệt làm giá trị mặc định 840dp. Nếu bạn đặt x thành <600dp, thì phương thức triển khai trình duyệt sẽ mặc định là 600dp.

Khởi chạy một phần Thẻ tuỳ chỉnh bằng một phiên hoạt động hiện có

CustomTabsSession customTabsSession;

// ...

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder(customTabsSession)
   .setInitialActivityHeightPx(500)
    .setInitialActivityWidthPx(400);
    .setActivitySideSheetBreakpointDp(800);
   .setCloseButtonPosition(CustomTabsIntent.CLOSE_BUTTON_POSITION_END)
   // ...
   .build();

customTabsIntent.launchUrl(context, Uri.parse(url))

Chạy một phần Thẻ tuỳ chỉnh thông qua startActivityForResult

private ActivityResultLauncher<String> mCustomTabLauncher = registerForActivityResult(new ActivityResultContract<String, Integer>() {
    @Override
    public Integer parseResult(int statusCode, @Nullable Intent intent) {
        return statusCode;
    }

    @NonNull
    @Override
    public Intent createIntent(@NonNull Context context, String url) {
        CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(customTabsSession)
                .setInitialActivityHeightPx(500)
                .setInitialActivityWidthPx(400);
                .setActivitySideSheetBreakpointDp(800);
                .setCloseButtonPosition(CustomTabsIntent.CLOSE_BUTTON_POSITION_END)
                .setToolbarCornerRadiusDp(10);
        Intent customTabsIntent = builder.build().intent;
        customTabsIntent.setData(Uri.parse(url));
        return customTabsIntent;
    }
}, new ActivityResultCallback<Integer>() {
    @Override
    public void onActivityResult(Integer statusCode) {
       // ...
    }
});

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    Button selectButton = findViewById(R.id.select_button);
    selectButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            mCustomTabLauncher.launch(customTabsIntent.intent);
        }
    });
}

Tiếp theo: tìm hiểu cách đo lường mức độ tương tác của người dùng trong Thẻ tuỳ chỉnh.