כדי להראות למשתמש חדש איך להפיק את המקסימום מהאפליקציה, יש להציג מידע על תהליך ההפעלה של האפליקציה במהלך ההפעלה. כמה דוגמאות למשתמשים חדשים מידע:
- להציג מידע מפורט על הערוצים הזמינים כשמשתמש ניגש לאפליקציה של הערוץ.
- כדאי להסב את תשומת הלב לתכונות חשובות באפליקציה.
- המחשת פעולות שנדרשות או מומלצות שהמשתמשים צריכים לבצע כאשר באמצעות האפליקציה בפעם הראשונה.
ספריית androidx.leanback מספקת
כיתה אחת (OnboardingSupportFragment
) עבור
הצגת מידע על משתמש חדש. במדריך הזה נסביר איך להשתמש
כיתה אחת (OnboardingSupportFragment
) להצגה
מידע מבוא שמוצג כשהאפליקציה מופעלת בפעם הראשונה
בזמן האימון.
האפליקציה OnboardingSupportFragment
משתמשת בממשק המשתמש של הטלוויזיה
שיטות מומלצות להצגת מידע באופן שתואם לסגנונות של ממשק המשתמש בטלוויזיה
וקל לנווט בו במכשירי טלוויזיה.
השיטה OnboardingSupportFragment
לא מתאימה לכל תרחיש לדוגמה.
אין להשתמש במאפיין OnboardingSupportFragment
כשיש צורך לכלול
רכיבים בממשק המשתמש שנדרשים להם קלט של משתמשים, כמו לחצנים ושדות.
בנוסף, אין להשתמש ב-OnboardingSupportFragment
למשימות שהמשתמש יבצע
באופן קבוע. לבסוף, אם אתם צריכים להציג ממשק משתמש מרובה דפים
קלט של משתמשים, כדאי להשתמש
GuidedStepSupportFragment
הוספת OnboardSupportFragment
כדי להוסיף OnboardingSupportFragment
באפליקציה, להטמיע מחלקה שמתרחבת
הכיתה OnboardingSupportFragment
. הוסף
את המקטע הזה לפעילות, באמצעות פריסת ה-XML של הפעילות או
באופן פרוגרמטי. חשוב לוודא שהפעילות
משתמש בעיצוב שנגזר מ-
Theme_Leanback_Onboarding
,
כמו שמתואר בקטע התאמה אישית של עיצובים.
בשיטה onCreate()
של
הפעילות העיקרית של האפליקציה, התקשרות
startActivity()
עם Intent
שמצביע אל
פעילות ההורה של OnboardingSupportFragment
.
כך אנחנו יכולים לוודא שהמאפיינים
OnboardingSupportFragment
מופיע בתור
ברגע שהאפליקציה מופעלת.
כדי להבטיח
OnboardingSupportFragment
מופיע רק
בפעם הראשונה שהמשתמש מפעיל את האפליקציה, השתמשו
אובייקט SharedPreferences
כדי לבדוק אם המשתמש כבר צפה
OnboardingSupportFragment
הגדרת ערך בוליאני
שמשתנה ל-True כשהמשתמש מסיים לצפות
OnboardingSupportFragment
לבדיקה
בערך הזה בפעילות העיקרית
השיטה onCreate()
ורק מתחילים
פעילות הורה של OnboardingSupportFragment
אם
שהערך הוא False.
בדוגמה הבאה מוצג שינוי מברירת המחדל של onCreate()
שבודק אם יש
הערך של SharedPreferences
, ואם הוא לא מוגדר כ-True, הפונקציה
startActivity()
כדי להציג את OnboardingSupportFragment
:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) PreferenceManager.getDefaultSharedPreferences(this).apply { // Check if we need to display our OnboardingSupportFragment if (!getBoolean(MyOnboardingSupportFragment.COMPLETED_ONBOARDING_PREF_NAME, false)) { // The user hasn't seen the OnboardingSupportFragment yet, so show it startActivity(Intent(this@OnboardingActivity, OnboardingActivity::class.java)) } } }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); // Check if we need to display our OnboardingSupportFragment if (!sharedPreferences.getBoolean( MyOnboardingSupportFragment.COMPLETED_ONBOARDING_PREF_NAME, false)) { // The user hasn't seen the OnboardingSupportFragment yet, so show it startActivity(new Intent(this, OnboardingActivity.class)); } }
אחרי שהמשתמש צופה
OnboardingSupportFragment
, סימון כפריט שנצפה
באמצעות האובייקט SharedPreferences
. כדי לעשות את זה, צריך לשנות את הערך
onFinishFragment()
בOnboardingSupportFragment
ולהגדיר את SharedPreferences
כ-true, כפי שמוצג בדוגמה הבאה:
Kotlin
override fun onFinishFragment() { super.onFinishFragment() // User has seen OnboardingSupportFragment, so mark our SharedPreferences // flag as completed so that we don't show our OnboardingSupportFragment // the next time the user launches the app PreferenceManager.getDefaultSharedPreferences(context).edit().apply { putBoolean(COMPLETED_ONBOARDING_PREF_NAME, true) apply() } }
Java
@Override protected void onFinishFragment() { super.onFinishFragment(); // User has seen OnboardingSupportFragment, so mark our SharedPreferences // flag as completed so that we don't show our OnboardingSupportFragment // the next time the user launches the app SharedPreferences.Editor sharedPreferencesEditor = PreferenceManager.getDefaultSharedPreferences(getContext()).edit(); sharedPreferencesEditor.putBoolean( COMPLETED_ONBOARDING_PREF_NAME, true); sharedPreferencesEditor.apply(); }
הוספת דפים של OnboardSupportFragment
OnboardingSupportFragment
מציגה תוכן בסדרה של דפים לפי סדר מסוים. אחרי שמוסיפים את
OnboardingSupportFragment
, עליך להגדיר
בדפי ההדרכה למשתמשים חדשים. לכל דף יכולים להיות כותרת, תיאור
כמה תצוגות משנה שיכולות להכיל תמונות או אנימציות.
באיור 2 מוצג דף לדוגמה עם נכסי יתרונות מרכזיים שמסמנים דף בהתאמה אישית.
רכיבים ש-OnboardingSupportFragment
יכולים לספק. רכיבי הדף הם:
- כותרת הדף.
- תיאור הדף.
- תצוגת תוכן הדף, במקרה זה, סימן וי ירוק פשוט בתיבה אפורה. התצוגה הזו היא אופציונלית. אפשר להשתמש בתצוגה הזו כדי להמחיש את פרטי הדף. לדוגמה, אפשר כוללים צילום מסך שמדגיש את תכונת האפליקציה שהדף מתאר.
- תצוגת רקע של הדף, במקרה זה, הדרגתיות של צבע כחול פשוט. התצוגה הזו תמיד מוצג מאחורי תצוגות אחרות בדף. התצוגה הזו היא אופציונלית.
- התצוגה הקדמית של הדף, במקרה הזה, לוגו. התצוגה הזו תמיד מעובדת לפני כל התצוגות האחרות בדף. התצוגה הזו היא אופציונלית.
אתחול פרטי הדף כאשר
היצירה של OnboardingSupportFragment
היא ראשונה
או מצורפות לפעילות ההורה, בתור דף הבקשה של המערכת
כאשר הוא יוצר את התצוגה של המקטע. ניתן לאתחל את הדף
ב-constructor של המחלקה או לבטל את ההגדרה שלו
onAttach()
שינוי כל אחת מהשיטות הבאות, שמספקות פרטי דף למערכת:
getPageCount()
מחזירה את מספר הדפים ב-OnboardingSupportFragment
.getPageTitle()
מחזירה את הכותרת של מספר הדף המבוקש.getPageDescription()
מחזיר את התיאור של הדף המבוקש מספר.
כדי לספק תצוגות משנה אופציונליות, מומלץ לשנות כל אחת מהשיטות הבאות כדי להציג תמונות או אנימציות:
onCreateBackgroundView()
הפונקציה מחזירהView
הגדרה כך שתפעל כתצוגת רקע או ערך null אם לא נדרשת תצוגת רקע.onCreateContentView()
הפונקציה מחזירהView
Create כדי לפעול כתצוגת תוכן או null אם לא נדרשת צפייה בתוכן.onCreateForegroundView()
הפונקציה מחזירהView
יוצרים כך שיפעלו כתצוגה בחזית או כ-null אם לא נדרשת תצוגה קדמית.
המערכת מוסיפה לדף את View
שיצרת
הפריסה שלו. הדוגמאות הבאות מחליפות את ברירת המחדל
onCreateContentView()
ומחזירה
ImageView
:
Kotlin
private lateinit var contentView: ImageView ... override fun onCreateContentView(inflater: LayoutInflater?, container: ViewGroup?): View? { return ImageView(context).apply { scaleType = ImageView.ScaleType.CENTER_INSIDE setImageResource(R.drawable.onboarding_content_view) setPadding(0, 32, 0, 32) contentView = this } }
Java
private ImageView contentView; ... @Override protected View onCreateContentView(LayoutInflater inflater, ViewGroup container) { contentView = new ImageView(getContext()); contentView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); contentView.setImageResource(R.drawable.onboarding_content_view); contentView.setPadding(0, 32, 0, 32); return contentView; }
הוספת מסך ראשוני של לוגו
OnboardingSupportFragment
יכול להתחיל
עם מסך אופציונלי של לוגו שמציג את האפליקציה שלכם. אם רוצים להציג
Drawable
בתור מסך הלוגו,
setLogoResourceId()
עם המזהה של Drawable
בonCreate()
של OnboardingSupportFragment
.
המערכת נעלמת ומציגה לזמן קצר את
Drawable
, ולאחר מכן עמעום הדרגתי Drawable
לפני הצגת הדף הראשון של OnboardingSupportFragment
.
אם אתם רוצים לספק אנימציה מותאמת אישית למסך הלוגו, במקום
התקשרות אל setLogoResourceId()
, שינוי מברירת המחדל
onCreateLogoAnimation()
ולהחזיר Animator
שמבצע רינדור של האנימציה המותאמת אישית, כמו בדוגמה הבאה:
Kotlin
public override fun onCreateLogoAnimation(): Animator = AnimatorInflater.loadAnimator(context, R.animator.onboarding_logo_screen_animation)
Java
@Override public Animator onCreateLogoAnimation() { return AnimatorInflater.loadAnimator(getContext(), R.animator.onboarding_logo_screen_animation); }
התאמה אישית של האנימציות בדף
המערכת משתמשת באנימציות ברירת מחדל בעת הצגת הדף הראשון של
OnboardingSupportFragment
ומתי המשתמש
עובר לדף אחר. אפשר להתאים אישית את האנימציות האלה
שעולות על השיטות
OnboardingSupportFragment
כדי להתאים אישית את האנימציה שמופיעה בדף הראשון:
לשנות
onCreateEnterAnimation()
ומחזירה את הערך Animator
.
הדוגמה הבאה יוצרת Animator
לשינוי קנה המידה של תצוגת התוכן
אופקי:
Kotlin
override fun onCreateEnterAnimation(): Animator = ObjectAnimator.ofFloat(contentView, View.SCALE_X, 0.2f, 1.0f) .setDuration(ANIMATION_DURATION)
Java
@Override protected Animator onCreateEnterAnimation() { Animator startAnimator = ObjectAnimator.ofFloat(contentView, View.SCALE_X, 0.2f, 1.0f).setDuration(ANIMATION_DURATION); return startAnimator; }
כדי להתאים אישית את האנימציה שבה המשתמש מנווט לדף אחר:
לשנות
onPageChanged()
ב-method onPageChanged()
, יוצרים Animator
אובייקטים
שמסירים את הדף הקודם ומציגים את הדף הבא, מוסיפים אותם
AnimatorSet
, ולשחק במערך. הבאים
לדוגמה משתמשת באנימציה של יציאה הדרגתית כדי להסיר את הדף הקודם, מעדכנת את
תמונה של תצוגת תוכן, ומשתמשת באנימציה הדרגתית כדי להציג את הדף הבא:
Kotlin
override fun onPageChanged(newPage: Int, previousPage: Int) { // Create a fade-out animation for previousPage and, once // done, swap the contentView image with the next page's image val fadeOut = ObjectAnimator.ofFloat(mContentView, View.ALPHA, 1.0f, 0.0f) .setDuration(ANIMATION_DURATION) .apply { addListener(object : AnimatorListenerAdapter() { override fun onAnimationEnd(animation: Animator) { mContentView.setImageResource(pageImages[newPage]) } }) } // Create a fade-in animation for nextPage val fadeIn = ObjectAnimator.ofFloat(mContentView, View.ALPHA, 0.0f, 1.0f) .setDuration(ANIMATION_DURATION) // Create AnimatorSet with fade-out and fade-in animators and start it AnimatorSet().apply { playSequentially(fadeOut, fadeIn) start() } }
Java
@Override protected void onPageChanged(final int newPage, int previousPage) { // Create a fade-out animation for previousPage and, once // done, swap the contentView image with the next page's image Animator fadeOut = ObjectAnimator.ofFloat(mContentView, View.ALPHA, 1.0f, 0.0f).setDuration(ANIMATION_DURATION); fadeOut.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { mContentView.setImageResource(pageImages[newPage]); } }); // Create a fade-in animation for nextPage Animator fadeIn = ObjectAnimator.ofFloat(mContentView, View.ALPHA, 0.0f, 1.0f).setDuration(ANIMATION_DURATION); // Create AnimatorSet with fade-out and fade-in animators and start it AnimatorSet set = new AnimatorSet(); set.playSequentially(fadeOut, fadeIn); set.start(); }
לפרטים נוספים על יצירת
Animator
אובייקטים ו
AnimatorSet
אובייקטים, ראו
סקירה כללית של אנימציה של נכס.
התאמה אישית של העיצובים
כל OnboardingSupportFragment
חייב להשתמש
עיצוב Theme_Leanback_Onboarding
או עיצוב יורש מ-Theme_Leanback_Onboarding
. מגדירים את
עבור OnboardingSupportFragment
באמצעות אחת מהפעולות הבאות:
- צריך להגדיר את פעילות ההורה של
OnboardingSupportFragment
כדי להשתמש ב העיצוב הרצוי. בדוגמה הבאה אפשר לראות איך מגדירים פעילות לשימושTheme_Leanback_Onboarding
בקובץ המניפסט של האפליקציה:<activity android:name=".OnboardingActivity" android:enabled="true" android:exported="true" android:theme="@style/Theme.Leanback.Onboarding"> </activity>
-
כדי להגדיר את העיצוב בפעילות של ההורה, משתמשים במשתנה הבא:
LeanbackOnboardingTheme_onboardingTheme
בנושא פעילות מותאמת אישית. הפניה של המאפיין הזה למקום אחר עיצוב מותאם אישית, שרקOnboardingSupportFragment
אובייקטים בפעילות שלכם. כדאי להשתמש בגישה הזו אם כבר נעשה שימוש בפעילות שלך עיצוב מותאם אישית שאינך רוצה להחילOnboardingSupportFragment
סגנונות אחרים צפיות בפעילות. - שינוי מברירת המחדל
onProvideTheme()
ומחזירים את העיצוב הרצוי. כדאי להשתמש בגישה הזו אם במודל הזה נעשה שימוש רבOnboardingSupportFragment
או אם בפעילות ההורה לא נעשה שימוש בעיצוב הרצוי. הדוגמה הבאה מבטלת אתonProvideTheme()
ומחזירהTheme_Leanback_Onboarding
:Kotlin
override fun onProvideTheme(): Int = R.style.Theme_Leanback_Onboarding
Java
@Override public int onProvideTheme() { return R.style.Theme_Leanback_Onboarding; }