Aby pokazać nowemu użytkownikowi, jak może maksymalnie wykorzystać możliwości aplikacji, zamieść prezentację podczas uruchamiania aplikacji. Oto kilka przykładów informacje:
- Gdy użytkownik pokazuje użytkownikowi, które kanały są dostępne, pierwszy raz otwiera aplikację kanału.
- Zwróć uwagę na najważniejsze funkcje aplikacji.
- Opisz wymagane lub zalecane kroki, które użytkownicy powinni wykonać, za pierwszym razem.
Biblioteka androidx.leanback udostępnia funkcje
OnboardingSupportFragment
zajęcia dla
w ramach prezentacji
informacje o użytkowniku po raz pierwszy. W tym przewodniku opisujemy, jak korzystać z
OnboardingSupportFragment
zajęcia do wyświetlenia
informacje wprowadzające dla użytkowników, które są wyświetlane przy pierwszym uruchomieniu aplikacji.
obecnie się znajdujesz.
Aplikacja OnboardingSupportFragment
korzysta z interfejsu telewizora
sprawdzone metody prezentowania informacji w sposób dopasowany do stylów interfejsu telewizora
i jest łatwa w obsłudze na telewizorach.
Element OnboardingSupportFragment
nie jest odpowiedni w każdym przypadku użycia.
Nie używaj OnboardingSupportFragment
, gdy musisz dodać
elementy interfejsu, które wymagają danych wejściowych użytkownika, takie jak przyciski i pola;
Nie używaj też nazwy OnboardingSupportFragment
do zadań, które ten użytkownik będzie wykonywać
regularnie. Jeśli musisz zaprezentować wielostronicowy interfejs użytkownika, który wymaga
użytkowników, rozważ użycie
GuidedStepSupportFragment
Dodaj fragment OnboardingSupportFragment
Aby dodać: OnboardingSupportFragment
do aplikacji, zaimplementuj klasę, która rozszerza
klasy OnboardingSupportFragment
. Dodaj
ten fragment do aktywności, korzystając z kodu XML układu aktywności lub
automatycznie. Upewnij się, że aktywność lub
Ten fragment korzysta z motywu opartego na
Theme_Leanback_Onboarding
,
jak opisano w sekcji Dostosowywanie motywów.
W metodzie onCreate()
Twojego
główną aktywność w aplikacji, połączenie
startActivity()
z Intent
wskazującym
aktywność rodzica OnboardingSupportFragment
Dzięki temu Twoje reklamy
OnboardingSupportFragment
jest wyświetlany jako
zaraz po uruchomieniu aplikacji.
Aby zapewnić, że
OnboardingSupportFragment
wyświetla się tylko w
przy pierwszym uruchomieniu aplikacji przez użytkownika, użyj atrybutu
SharedPreferences
obiekt
śledzić, czy użytkownik już wyświetlił
OnboardingSupportFragment
Zdefiniuj wartość logiczną
wartość, która zmienia się na true, gdy użytkownik obejrzy
OnboardingSupportFragment
Sprawdź
tę wartość w głównych aktywnościach
onCreate()
i rozpocznij tylko
OnboardingSupportFragment
aktywność rodzica, jeśli
wartość to false (fałsz).
Poniższy przykład pokazuje zastąpienie reguły onCreate()
, które sprawdza, czy
SharedPreferences
ma wartość, a jeśli nie jest ustawiona na „true” (prawda), wywołuje
startActivity()
, aby wyświetlić 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)); } }
Gdy użytkownik wyświetli
OnboardingSupportFragment
, oznacz je jako wyświetlone
przy użyciu obiektu SharedPreferences
. Aby to zrobić, zastąp
onFinishFragment()
w: OnboardingSupportFragment
i ustaw SharedPreferences
jak w tym przykładzie:
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(); }
Dodaj strony OnboardingSupportFragment
OnboardingSupportFragment
wyświetla treść w serii uporządkowanych stron. Po dodaniu
OnboardingSupportFragment
, musisz zdefiniować
na stronach wprowadzenia. Każda strona może mieć tytuł, opis i
kilka widoków podrzędnych, które mogą zawierać obrazy lub animacje.
Ilustracja 2 przedstawia przykładową stronę z objaśnieniami oznaczającymi stronę możliwą do dostosowania
elementy, które OnboardingSupportFragment
co może dostarczyć. Elementy strony to:
- Tytuł strony.
- Opis strony.
- Widok zawartości strony, w tym przypadku prosty zielony znacznik wyboru w szarym polu. Ten widok jest opcjonalny. Użyj tego widoku do zilustrowania szczegółów strony. Możesz na przykład: dołączyć zrzut ekranu przedstawiający funkcję aplikacji
- Widok tła strony, w tym przypadku prosty niebieski gradient. Ten widok zawsze jest wyświetlana za innymi widokami na stronie. Ten widok jest opcjonalny.
- Widok na pierwszym planie strony, w tym przypadku logo. Ten widok zawsze renderuje przed wszystkimi innymi widokami na stronie. Ten widok jest opcjonalny.
Inicjuj informacje o stronie, gdy
Pierwsze utworzenie: OnboardingSupportFragment
lub dołączone do aktywności nadrzędnej, zgodnie z żądaniami systemu
informacji podczas tworzenia widoku fragmentu. Możesz zainicjować stronę
w konstruktorze klas lub w zastąpieniu
onAttach()
Zastąp każdą z poniższych metod, które dostarczają informacje o stronie do systemu:
getPageCount()
zwraca liczbę stron wOnboardingSupportFragment
getPageTitle()
zwraca tytuł żądanej strony.getPageDescription()
zwraca opis żądanej strony numer.
Zastąp każdą z poniższych metod, aby wyświetlić opcjonalne widoki podrzędne w celu wyświetlenia obrazów lub animacji:
onCreateBackgroundView()
zwraca wartośćView
, create, aby działać jako widok tła, lub wartość null, jeśli nie jest potrzebny widok tła.onCreateContentView()
zwraca wartośćView
, create, aby działać jako wyświetlenie treści, lub wartość null, jeśli nie jest potrzebne żadne wyświetlenie treści.onCreateForegroundView()
zwraca wartośćView
, create, aby działać jako widok na pierwszym planie, lub wartość null, jeśli nie jest potrzebny żaden widok na pierwszym planie.
System doda do strony utworzone przez Ciebie View
układ. Poniższy przykładowy zastąpi
onCreateContentView()
i zwraca
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; }
Dodaj początkowy ekran z logo
OnboardingSupportFragment
może się uruchomić
z opcjonalnym ekranem z logo przedstawiającym aplikację. Jeśli chcesz wyświetlać
Drawable
jako ekran z logo,
setLogoResourceId()
z identyfikatorem Twojego urządzenia Drawable
w: onCreate()
metody OnboardingSupportFragment
.
System naświetli się i na chwilę wyświetli
Drawable
, a następnie przyciemnia się o Drawable
przed wyświetleniem pierwszej strony OnboardingSupportFragment
.
Jeśli chcesz stworzyć niestandardową animację na ekranie z logo, zamiast
wywołuję setLogoResourceId()
, zastąp
onCreateLogoAnimation()
i zwróć Animator
który renderuje niestandardową animację, jak w tym przykładzie:
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); }
Dostosuj animacje na stronie
System stosuje domyślne animacje przy wyświetlaniu pierwszej strony Twojej witryny
OnboardingSupportFragment
, a gdy użytkownik
powoduje przejście na inną stronę. Możesz dostosować te animacje,
zastępowania metod w
OnboardingSupportFragment
Aby dostosować animację wyświetlaną na pierwszej stronie:
zastąpić
onCreateEnterAnimation()
i zwraca Animator
.
Ten przykład pozwala utworzyć obiekt Animator
, który skaluje widok treści
w poziomie:
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; }
Aby dostosować animację używaną, gdy użytkownik przechodzi na inną stronę:
zastąpić
onPageChanged()
W metodzie onPageChanged()
utwórz obiekty Animator
usuwających poprzednią stronę i wyświetlających następną stronę, dodaj je do sekcji
AnimatorSet
i zagrać set. Poniżej
wykorzystuje animację zanikania w celu usunięcia poprzedniej strony, aktualizuje
i wykorzystuje animację zanikania do wyświetlenia następnej strony:
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(); }
Więcej informacji o tworzeniu
Animator
obiektów i
AnimatorSet
obiektów, patrz
Omówienie animacji obiektu.
Dostosuj motywy
Dowolny OnboardingSupportFragment
musi używać funkcji
Motyw Theme_Leanback_Onboarding
lub motyw, który dziedziczy z elementu Theme_Leanback_Onboarding
. Ustaw parametr
motyw urządzenia OnboardingSupportFragment
, wykonując jedną z tych czynności:
- Ustaw aktywność rodzica
OnboardingSupportFragment
tak, aby używała wybranego motywu. Przykład poniżej pokazuje, jak skonfigurować aktywnośćTheme_Leanback_Onboarding
w pliku manifestu aplikacji:<activity android:name=".OnboardingActivity" android:enabled="true" android:exported="true" android:theme="@style/Theme.Leanback.Onboarding"> </activity>
-
Aby ustawić motyw w aktywności rodzica, użyj parametru
LeanbackOnboardingTheme_onboardingTheme
w niestandardowym temacie aktywności. Przypisz ten atrybut do innego motyw niestandardowy, który tylkoOnboardingSupportFragment
używane obiekty w aktywności. Zastosuj tę metodę, jeśli Twoja aktywność motyw niestandardowy i nie chcesz go stosowaćOnboardingSupportFragment
stylów do innego wyświetleń w ramach aktywności. - Zastąp
onProvideTheme()
i zwróć wybrany motyw. Zastosuj tę metodę, jeśli: wiele aktywności wymagaOnboardingSupportFragment
lub jeśli aktywność rodzica nie może użyć wybranego motywu. Poniższy przykład zastępujeonProvideTheme()
i zwracaTheme_Leanback_Onboarding
:Kotlin
override fun onProvideTheme(): Int = R.style.Theme_Leanback_Onboarding
Java
@Override public int onProvideTheme() { return R.style.Theme_Leanback_Onboarding; }