Uygulamanızı ilk kez kullananları tanıtma

Compose ile daha iyi hizmet verin
Android TV OS için Jetpack Compose'u kullanarak minimum kodla etkileyici kullanıcı arayüzleri oluşturun.

Uygulamanızı ilk kez kullanan bir kullanıcıya uygulamanızdan en iyi şekilde nasıl yararlanacağını göstermek için Uygulama başlatılırken ilk katılım bilgileri. İlk katılımla ilgili bazı örnekleri burada bulabilirsiniz bilgi:

  • Bir kullanıcı dönüşüm gerçekleştirdiğinde hangi kanalların mevcut olduğuyla ilgili Kullanıcı bir kanal uygulamasına eriştiğinde
  • Uygulamanızdaki dikkate değer özelliklere dikkat çekin.
  • Kullanıcıların ilk olarak izlemesi gereken adımları veya önerilen adımları ilk kez kullanıyor olmanız gerekir.

androidx.leanback kitaplığı şunları sağlar: Şu ders için OnboardingSupportFragment ders: ilk kez kullananların bilgilerini sunmak. Bu kılavuzda, OnboardingSupportFragment sınıf gösterilecek uygulama ilk kez başlatıldığında gösterilen tanıtım bilgilerini gerekir.

OnboardingSupportFragment, TV kullanıcı arayüzünü kullanır bilgileri TV kullanıcı arayüzü stillerine uygun şekilde sunmaya yönelik en iyi uygulamalar TV cihazlarında gezinmesi kolay.

Şekil 1. Örnek OnboardingSupportFragment

OnboardingSupportFragment her kullanım alanı için uygun değildir. Eklemeniz gerektiğinde OnboardingSupportFragment kullanmayın Düğmeler ve alanlar gibi kullanıcı girişi gerektiren kullanıcı arayüzü öğeleri. Ayrıca, kullanıcının gerçekleştireceği görevler için OnboardingSupportFragment öğesini kullanmayın gerekir. Son olarak, çok sayfalı bir kullanıcı arayüzü sunmanız gerekiyorsa kontrol etmek isterseniz GuidedStepSupportFragment

OnboardingSupportFragment ekleyin

OnboardingSupportFragment eklemek için bir sınıf kullanın. OnboardingSupportFragment sınıfı. Ekle bu parçayı, etkinliğin düzen XML'sini kullanarak veya bir etkinliğe daha fazla bilgi edindiniz. Etkinliğin veya parçası, Theme_Leanback_Onboarding, Temaları özelleştirme bölümünde açıklandığı gibi.

Hesabınızın onCreate() ana etkinliği, uygulamanın startActivity() şuna işaret eden bir Intent ile: OnboardingSupportFragment cihazınızın ana etkinliği. Böylece proje boyunca OnboardingSupportFragment şu şekilde görünüyor: uygulamanız başlar başlamaz.

Ekibin OnboardingSupportFragment yalnızca Kullanıcı uygulamanızı ilk kez başlattığında, SharedPreferences nesne kullanıcının sayfayı daha önce görüntüleyip görüntülemediğini OnboardingSupportFragment Boole tanımlama kullanıcı sayfayı görüntülemeyi bitirdiğinde true olarak değişen değer OnboardingSupportFragment Kontrol et ana etkinliğinizde bu değeri onCreate() yöntemini kullanarak yalnızca Aşağıdaki durumlarda OnboardingSupportFragment ana etkinliği değer false'tur.

Aşağıdaki örnekte,onCreate() SharedPreferences değeri ve doğru değerine ayarlanmazsa OnboardingSupportFragment göstermek için startActivity():

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

Kullanıcı sayfayı görüntüledikten sonra OnboardingSupportFragment, görüntülendi olarak işaretleyin (SharedPreferences nesnesini kullanarak) Bunu yapmak için, onFinishFragment(). OnboardingSupportFragment içinde SharedPreferences ayarlayın değerini "true" (doğru) olarak ayarlayın:

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 sayfaları ekleme

OnboardingSupportFragment İçeriği sıralı bir dizi sayfada görüntüler. OnboardingSupportFragment, aşağıdakileri tanımlamanız gerekir: ilk katılım sayfaları. Her sayfanın bir başlığı, açıklaması ve Resim veya animasyon içerebilen birkaç alt görünüm.

Şekil 2. OnboardingSupportFragment. sayfa öğeleri dahil edilir.

Şekil 2'de, özelleştirilebilir sayfayı işaretleyen açıklama metinleri içeren örnek bir sayfa gösterilmektedir OnboardingSupportFragment öğeleri yardımcı olabilir. Sayfa öğeleri şunlardır:

  1. Sayfa başlığı.
  2. Sayfa açıklaması.
  3. Sayfa içeriği görünümü. Bu örnekte, gri bir kutu içinde basit yeşil bir onay işareti yer alır. Bu görünüm isteğe bağlıdır. Sayfa ayrıntılarını göstermek için bu görünümü kullanın. Örneğin, eğitime sayfada açıklanan uygulama özelliğini vurgulayan bir ekran görüntüsü ekleyin.
  4. Sayfanın arka plan görünümü. Bu örnekte, basit bir mavi gradyan. Bu görünüm her zaman sayfadaki diğer görünümlerin arkasında oluşturulur. Bu görünüm isteğe bağlıdır.
  5. Sayfanın ön planı görünümü (bu örnekte logo). Bu görünüm her zaman oluşturulur diğer tüm görüntülemelerin önüne geçirin. Bu görünüm isteğe bağlıdır.

İlk olarak OnboardingSupportFragment oluşturuldu veya üst etkinliğe ekli (sistem istekler sayfası olarak) parçanın görünümünü oluşturduğunda bu bilgileri saklar. Sayfayı ilk kullanıma hazırlayabilirsiniz içindeki bilgileri sınıf oluşturucunuzdaki veya bir geçersiz kılmanın onAttach()

Sayfa bilgileri sağlayan aşağıdaki yöntemlerin her birini geçersiz kıl ekleme:

İsteğe bağlı alt görünümler sağlamak için aşağıdaki yöntemlerin her birini geçersiz kılın resim veya animasyon görüntülemek için:

  • onCreateBackgroundView(). şunu döndürür: View arka plan görünümü olarak ayarlamak veya arka plan görünümü gerekli değilse null ayarlamak için "create" değerini kullanabilirsiniz.
  • onCreateContentView(). şunu döndürür: View "create" değerini kullanabilirsiniz.
  • onCreateForegroundView(). şunu döndürür: View "create" değerini kullanabilirsiniz.

Sistem, oluşturduğunuz View öğesini sayfaya ekler kullanır. Aşağıdaki örnek geçersiz kılmalar onCreateContentView() ve bir 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;
}

İlk logo ekranı ekleme

OnboardingSupportFragment cihazınız başlayabilir uygulamanızı tanıtan isteğe bağlı bir logo ekranıyla birlikte. Görüntülü Reklam Ağı'nda Drawable telefon görüşmesi yapın, setLogoResourceId() Drawable numaralı cihazınızın kimliği onCreate() içinde OnboardingSupportFragment yönteminiz. Sistem görünür hale gelir ve kısa bir süre için Drawable, ardından Drawable soluklaşır görüntülemeden önce OnboardingSupportFragment sayfanızın ilk sayfasını görüntülemenizi öneririz.

Logo ekranınız için setLogoResourceId() aranıyor, geçersiz kıl onCreateLogoAnimation() ve bir Animator döndür nesnesini tanımlayın:

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

Sayfa animasyonlarını özelleştirme

Sistem, sayfanızın ilk sayfasını görüntülerken varsayılan animasyonları kullanır. OnboardingSupportFragment ve kullanıcının kullanıcı farklı bir sayfaya gider. Bu animasyonları aşağıdakileri yaparak özelleştirebilirsiniz: geçersiz kılma yöntemlerini OnboardingSupportFragment

İlk sayfanızda görünen animasyonu özelleştirmek için geçersiz kılma onCreateEnterAnimation(). Animator değerini döndürür. Aşağıdaki örnekte, içerik görünümünü ölçeklendiren bir Animator oluşturulur yatay olarak:

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

Kullanıcı farklı bir sayfaya gittiğinde kullanılan animasyonu özelleştirmek için geçersiz kılma onPageChanged() onPageChanged() yönteminizde Animator nesne oluşturun önceki sayfayı kaldırıp sonraki sayfayı görüntüleyen, bunları bir AnimatorSet ve seti oynayın. Aşağıdakiler örneği, önceki sayfayı kaldırmak için bir belirme animasyonu kullanır, içerik görüntüleme resmi yapar ve sonraki sayfayı görüntülemek için kararma animasyon kullanır:

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

Görüntülü Reklam Ağı kampanyası oluşturma hakkında Animator nesne ve AnimatorSet nesne, bkz. Mülk Animasyonuna Genel Bakış.

Temaları özelleştirin

Tüm OnboardingSupportFragment uygulama, Theme_Leanback_Onboarding teması veya Theme_Leanback_Onboarding öğesinden devralan bir tema. Ayarlayın: Aşağıdakilerden birini yaparak OnboardingSupportFragment için bir tema oluşturabilirsiniz:

  • Şunu kullanmak için OnboardingSupportFragment üst etkinliğini ayarlayın: ekleyebilirsiniz. Aşağıdaki örnekte, kullanılacak bir etkinliğin nasıl ayarlanacağı Uygulama manifestindeki Theme_Leanback_Onboarding:
    <activity
       android:name=".OnboardingActivity"
       android:enabled="true"
       android:exported="true"
       android:theme="@style/Theme.Leanback.Onboarding">
    </activity>
    
  • Ebeveyn etkinliğinde temayı ayarlamak için LeanbackOnboardingTheme_onboardingTheme. özelliğini kullanarak yeniden gönderin. Bu özelliği başka bir özelliğe yönlendirin yalnızca OnboardingSupportFragment nesnelerin neler olduğunu öğrendik. Etkinliğinizde zaten istemediğiniz bir özel tema varsa OnboardingSupportFragment stilden başka birine dokunun görüntüleme sayısı.
  • Geçersiz kıl onProvideTheme() ve istediğiniz temayı döndürün. Aşağıdaki durumlarda bu yaklaşımı kullanın: birden fazla etkinlik OnboardingSupportFragment. veya ebeveyn etkinliği istenen temayı kullanamıyorsa. Aşağıdaki örnek, onProvideTheme() değerini geçersiz kılar ve şu sonucu geçersiz kılar: Theme_Leanback_Onboarding:

    Kotlin

    override fun onProvideTheme(): Int = R.style.Theme_Leanback_Onboarding
    

    Java

    @Override
    public int onProvideTheme() {
       return R.style.Theme_Leanback_Onboarding;
    }