ولإطلاع المستخدم لأول مرة على كيفية الاستفادة إلى أقصى حد من تطبيقك، يُرجى تقديم الإعداد عند بدء تشغيل التطبيق. في ما يلي بعض الأمثلة على خطوات إعداد الموظفين المعلومات:
- تقديم معلومات تفصيلية حول القنوات المتاحة عندما يكون المستخدم يدخل أولاً إلى تطبيق القناة.
- يمكنك لفت انتباه المستخدمين إلى الميزات البارزة في تطبيقك.
- توضيح أي خطوات مطلوبة أو يُنصح بها يجب أن يتّخذها المستخدمون عند استخدام التطبيق لأول مرة.
وتوفر مكتبة androidx.leanback
صف واحد (OnboardingSupportFragment
) لمدة
تقديم معلومات المستخدم لأول مرة. يصف هذا الدليل طريقة استخدام
يمكن مشاركة العرض في صف واحد (OnboardingSupportFragment
).
المعلومات التمهيدية التي يتم عرضها عند تشغيل التطبيق لأول مرة
الوقت.
يستخدم "OnboardingSupportFragment
" واجهة مستخدم التلفزيون.
أفضل الممارسات لتقديم المعلومات بطريقة تتوافق مع أنماط واجهة مستخدم التلفزيون
ويسهل التنقل فيها على أجهزة التلفزيون.
لا تُعدّ السمة OnboardingSupportFragment
مناسبة لجميع حالات الاستخدام.
عدم استخدام OnboardingSupportFragment
عند الحاجة إلى تضمين
عناصر واجهة المستخدم التي تتطلب من المستخدم البيانات، مثل الأزرار والحقول
يجب أيضًا عدم استخدام OnboardingSupportFragment
في المهام التي يؤدّيها المستخدم.
بانتظام. أخيرًا، إذا كنت بحاجة إلى تقديم واجهة مستخدم متعددة الصفحات تتطلب
إدخال المستخدم، ففكر في استخدام
GuidedStepSupportFragment
إضافة OnboardingSupportFragment
لإضافة OnboardingSupportFragment
في تطبيقك، وتنفيذ فئة تمتد
للفئة OnboardingSupportFragment
. إضافة
هذا الجزء إلى نشاط، إما باستخدام تنسيق XML الخاص بتنسيق النشاط أو
برمجيًا. تأكد من أن النشاط أو
الجزء يستخدم موضوعًا مشتقًا من
Theme_Leanback_Onboarding
,
كما هو موضَّح في قسم تخصيص المظاهر.
في طريقة onCreate()
من
النشاط الرئيسي للتطبيق، الاتصال
startActivity()
مع Intent
الذي يشير إلى
النشاط الرئيسي على "OnboardingSupportFragment
"
يساعد هذا في ضمان معرفة
يظهر OnboardingSupportFragment
كـ
فور بدء تشغيل تطبيقك.
للمساعدة في ضمان
يظهر OnboardingSupportFragment
فقط
عندما يبدأ المستخدم تشغيل تطبيقك لأول مرة،
عنصر واحد (SharedPreferences
)
لتتبُّع ما إذا كان المستخدم قد شاهد
OnboardingSupportFragment
تعريف قيمة منطقية
تتغيّر إلى "صحيح" عند انتهاء المستخدم من مشاهدة
OnboardingSupportFragment
التحقُّق من الإجابة
لهذه القيمة في نشاط
onCreate()
وابدأ
النشاط الوالدي OnboardingSupportFragment
إذا
تكون القيمة false.
يوضّح المثال التالي إلغاء onCreate()
الذي يتحقّق من وجود
قيمة SharedPreferences
، وإذا لم يتم ضبطها على "صحيح"، ستطلب
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
إلى صواب، كما هو موضح في المثال التالي:
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(); }
إضافة صفحات OnboardingSupportFragment
OnboardingSupportFragment
تعرض المحتوى في سلسلة من الصفحات المرتبة. بعد إضافة
OnboardingSupportFragment
، تحتاج إلى تحديد
صفحات الإعداد. يمكن أن تحتوي كل صفحة على عنوان ووصف
والعديد من طرق العرض الفرعية التي يمكن أن تحتوي على صور أو رسوم متحركة.
يوضح الشكل 2 مثالاً لصفحة بها وسائل شرح تشير إلى صفحة قابلة للتخصيص
العناصر التي تمت إضافتها إلى OnboardingSupportFragment
التي يمكن تقديمها. عناصر الصفحة هي:
- عنوان الصفحة.
- وصف الصفحة
- طريقة عرض محتوى الصفحة، وهي في هذه الحالة علامة اختيار خضراء بسيطة في مربع رمادي. طريقة العرض هذه اختيارية. استخدِم هذا العرض لتوضيح تفاصيل الصفحة. على سبيل المثال، قد تضمين لقطة شاشة تبرز ميزة التطبيق التي تصفها الصفحة.
- طريقة عرض خلفية الصفحة، وهي في هذه الحالة تدرج أزرق بسيط. طريقة العرض هذه يظهر دائمًا خلف طرق العرض الأخرى على الصفحة. طريقة العرض هذه اختيارية.
- تمثّل هذه السمة عرض واجهة الصفحة، وهي في هذه الحالة شعار. تقدم طريقة العرض هذه دائمًا قبل كل طرق العرض الأخرى في الصفحة طريقة العرض هذه اختيارية.
قم بتهيئة معلومات الصفحة عندما
تم إنشاء OnboardingSupportFragment
لأول مرة
أو مرفقًا بالنشاط الرئيسي، حيث إن صفحة طلبات النظام
المعلومات عند إنشاء عرض الجزء. يمكنك تهيئة صفحة
المعلومات الموجودة في الدالة الإنشائية للفئة أو في حالة تجاوز
onAttach()
تجاهُل كل طريقة من الطرق التالية، والتي توفّر معلومات عن الصفحة إلى النظام:
- تعرض الدالة
getPageCount()
عدد الصفحات فيOnboardingSupportFragment
- تعرض الدالة
getPageTitle()
العنوان لرقم الصفحة المطلوب. - تعرض الدالة
getPageDescription()
وصف الصفحة المطلوبة الصف.
تجاهَل كل طريقة من الطرق التالية لتوفير مشاهدات فرعية اختيارية. لعرض الصور أو الرسوم المتحركة:
onCreateBackgroundView()
بإرجاعView
إنشاؤه ليكون عرض الخلفية أو فارغًا إذا لم تكن هناك حاجة لعرض الخلفية.onCreateContentView()
بإرجاعView
إنشاؤه ليكون بمثابة عرض المحتوى أو فارغ إذا لم تكن هناك حاجة لعرض المحتوى.onCreateForegroundView()
بإرجاعView
إنشاء للعرض في المقدمة أو بقيمة فارغة إذا لم تكن هناك حاجة لعرض الواجهة الأمامية.
يضيف النظام 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()
في طريقة 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; }