ריבוי משימות עם כרטיסיות מותאמות אישית חלקיות

כברירת מחדל, 'כרטיסיות מותאמות אישית' מופעלות כפעילות בחלון מלא. הפעלה ב-Chrome 107, ניתן להשתמש בחלק מהכרטיסיות המותאמות אישית כדי לציין גובה הפעלה שונה הדגשת דיוקן כך שמשתמשים יוכלו לבצע ריבוי משימות במקביל על ידי אינטראקציה עם האפליקציה וצפייה בתוכן אינטרנט. המשתמשים יכולים להרחיב את הכרטיסייה 'מותאם אישית' למסך מלא על ידי גרירה את נקודת האחיזה למעלה בסרגל הכלים ולשחזר את גובה ההפעלה ההתחלתי על-ידי גרירה צריך ללחוץ על החץ למטה.

צילום מסך של גיליון תחתון של כרטיסייה חלקית
כרטיסייה מותאמת אישית חלקית בגיליון תחתון.

עבור מסכים גדולים או מכשירים בפריסה לרוחב, החל מ-Chrome 120, ניתן לציין, רוחב הפעלה מקסימלי להצגה של כרטיסייה חלקית בהתאמה אישית בצד גיליון. על ידי הגדרת נקודת עצירה, אפשר להחליט מתי להשיק חלק משותף בהתאמה אישית מקישים על Tab בגיליון התחתון או בגיליון צדדי.

צילום מסך של גיליון צדדי מסוג 'כרטיסייה חלקית'
כרטיסייה מותאמת אישית חלקית, בגיליון צדדי.

דרישות מוקדמות

כדי להשתמש בחלק מהכרטיסיות המותאמות אישית, אתם צריכים:

כדאי לשלב את שתי הגישות אם רוצים הפעלה מהירה במקרה שהשירות טרם נוצר חיבור.

הגדרת הגיליון התחתון

כדי להפוך כרטיסייה 'בהתאמה אישית' לכרטיסייה 'מותאמת אישית' חלקית, צריך להגדיר את גובה ההפעלה ההתחלתי בפיקסלים, באמצעות קריאה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);

הכרטיסייה 'בהתאמה אישית' תפעל כגיליון צדדי אם רוחב המסך גדול מ- ערך נקודת העצירה (breakpoint) שהוגדר setActivitySideSheetBreakpointDp(). אם רוחב המסך גבוה מ-x, הכרטיסייה 'בהתאמה אישית' תפעל כצידי גיליון אלקטרוני. אחרת, הוא יפעל כגיליון תחתון. אם אין נקודת עצירה (breakpoint) שצוין, צריך להגדיר את הטמעת הדפדפן כערך ברירת המחדל 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))

הפעלה של כרטיסייה חלקית בהתאמה אישית דרך startActivityForתוצאה

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

השלב הבא: איך מודדים את התעניינות המשתמשים בכרטיסיות המותאמות אישית