使用部分自定义标签页进行多任务处理

塞巴斯蒂安·本茨
Sebastian Benz

默认情况下,自定义标签页作为全窗口 activity 启动。从 Chrome 107 开始,您可以使用部分自定义标签页指定在竖屏模式下不同的启动高度,以便用户在查看 Web 内容时,通过与您的应用互动来开展多任务处理。用户可以通过向上拖动工具栏手柄将自定义标签页展开至全屏,也可以通过向下拖动手柄来恢复初始启动高度。

底部动作条“部分式标签页”的屏幕截图
底部动作条中的部分式自定义标签页。

对于大屏设备或处于横屏模式的设备,从 Chrome 120 开始,您可以指定启动宽度上限,以便在侧边动作条中显示部分自定义标签页。通过设置断点,您可以决定何时在底部动作条或侧边动作条中启动部分自定义标签页。

侧边工作表“部分式标签页”的屏幕截图
侧边动作条中的部分式自定义标签页。

前提条件

若要使用部分自定义标签页,您需要:

如果您希望在尚未建立服务连接的情况下快速启动,可以结合使用这两种方法。

配置底部动作条

如需将某个自定义标签页变成部分自定义标签页,请调用 CustomTabBuilder 类的 setInitialActivityHeightPx() 方法来定义初始启动高度(以像素为单位)。默认情况下,部分自定义标签页可调整大小,但您可以传递 ACTIVITY\_HEIGHT\_FIXED 以停用此行为:

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

配置侧边动作条

若要配置侧边动作条的行为,请调用 CustomTabBuilder 类的 setInitialActivityWidthPx() 方法来定义初始启动宽度(以像素为单位)。

默认情况下,部分自定义标签页可调整大小,但您可以传递 ACTIVITY\_HEIGHT\_FIXED 以停用此行为:

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

如果屏幕宽度大于 setActivitySideSheetBreakpointDp() 设置的断点值,则自定义标签页将作为侧边动作条使用。如果屏幕宽度大于 x,则自定义标签页将像侧边动作条一样操作,否则将表现为底部动作条。如果未指定断点,应将浏览器实现设置为默认值 840dp。如果 x 设置为 <600dp,浏览器实现应默认采用 600dp

使用现有会话启动部分自定义标签页

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))

通过 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);
        }
    });
}

接下来,您可以了解如何在自定义标签页中衡量用户互动度