Açıklamalı adım ekle

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ızda kullanıcılar için çok adımlı görevler olabilir. Örneğin, uygulamanızın ek içerik satın alma, karmaşık bir yapılandırma ayarı ayarlama veya yalnızca kararı onaylama konusunda kullanıcıları yönlendirmesi gerekebilir. Tüm bu görevler, bir veya daha fazla sıralı adım ya da kararda kullanıcılara yol göstermenizi gerektirir.

androidx.leanback kitaplığı, çok adımlı kullanıcı görevlerini uygulamak için sınıflar sağlar. Bu sayfada, bir görevi tamamlamak için verilen bir dizi kararda kullanıcıya rehberlik etmek amacıyla GuidedStepSupportFragment sınıfının nasıl kullanılacağı açıklanmaktadır. GuidedStepSupportFragment, çok adımlı görevlerin TV cihazlarında anlaşılmasını ve gezinmesini kolaylaştırmak için TV kullanıcı arayüzü en iyi uygulamalarından yararlanır.

Bir adımla ilgili ayrıntıları girin

GuidedStepSupportFragment, bir dizi adımdaki tek bir adımı temsil eder. Görsel olarak, adım için olası eylemlerin veya kararların listesini içeren bir rehberlik görünümü sunar.

Şekil 1. Açıklamalı adım örneği.

Çok adımlı görevinizdeki her adım için GuidedStepSupportFragment öğesini genişletin ve kullanıcının yapabileceği adım ve işlemler hakkında bağlam bilgisi sağlayın. Aşağıdaki örnekte gösterildiği gibi onCreateGuidance() değerini geçersiz kılar ve adım başlığı, açıklama ve simge gibi bağlam bilgilerini içeren yeni bir GuidanceStylist.Guidance değeri döndürür:

Kotlin

override fun onCreateGuidance(savedInstanceState: Bundle?): GuidanceStylist.Guidance {
    return GuidanceStylist.Guidance(
            getString(R.string.guidedstep_first_title),
            getString(R.string.guidedstep_first_description),
            getString(R.string.guidedstep_first_breadcrumb),
            activity.getDrawable(R.drawable.guidedstep_main_icon_1)
    )
}

Java

@Override
public GuidanceStylist.Guidance onCreateGuidance(Bundle savedInstanceState) {
    String title = getString(R.string.guidedstep_first_title);
    String breadcrumb = getString(R.string.guidedstep_first_breadcrumb);
    String description = getString(R.string.guidedstep_first_description);
    Drawable icon = getActivity().getDrawable(R.drawable.guidedstep_main_icon_1);
    return new GuidanceStylist.Guidance(title, description, breadcrumb, icon);
}

Etkinliğinizin onCreate() yönteminden GuidedStepSupportFragment.add() yöntemini çağırarak GuidedStepSupportFragment alt sınıfını istediğiniz etkinliğe ekleyin.

Etkinliğiniz yalnızca GuidedStepSupportFragment nesne içeriyorsa ilk GuidedStepSupportFragment nesnesini eklemek için add() yerine GuidedStepSupportFragment.addAsRoot() nesnesini kullanın. addAsRoot() kullanılması, kullanıcının ilk GuidedStepSupportFragment öğesini izlerken TV uzaktan kumandasındaki Geri düğmesine bastığında hem GuidedStepSupportFragment hem de üst etkinliğin kapatılmasına yardımcı olur.

Not: GuidedStepSupportFragment nesneleri düzen XML dosyalarınıza değil, programatik olarak ekleyin.

Kullanıcı işlemlerini oluşturma ve işleme

onCreateActions() değerini geçersiz kılarak kullanıcı işlemleri ekleyin. Geçersiz kılmanızda her işlem öğesi için yeni bir GuidedAction ekleyin ve işlem dizesini, açıklamayı ve kimliği girin. Yeni işlemler eklemek için GuidedAction.Builder kullanın.

Kotlin

override fun onCreateActions(actions: MutableList<GuidedAction>, savedInstanceState: Bundle?) {
    super.onCreateActions(actions, savedInstanceState)

    // Add "Continue" user action for this step
    actions.add(GuidedAction.Builder()
            .id(CONTINUE)
            .title(getString(R.string.guidedstep_continue))
            .description(getString(R.string.guidedstep_letsdoit))
            .hasNext(true)
            .build())
    ...

Java

@Override
public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
    // Add "Continue" user action for this step
    actions.add(new GuidedAction.Builder()
           .id(CONTINUE)
           .title(getString(R.string.guidedstep_continue))
           .description(getString(R.string.guidedstep_letsdoit))
           .hasNext(true)
           .build());
...

İşlemler tek satırlık seçimlerle sınırlı değildir. Oluşturabileceğiniz diğer eylem türleri şunlardır:

  • infoOnly(true) özelliğini ayarlayarak kullanıcı seçenekleri hakkında ek bilgi sağlamak için bilgi etiketi işlemi ekleyin. infoOnly doğru değerine ayarlandığında kullanıcılar işlemi seçemez.
  • editable(true) ayarlayarak düzenlenebilir bir metin işlemi ekleyin. editable Doğru değerine ayarlandığında kullanıcı, uzaktan kumandayı veya bağlı bir klavyeyi kullanarak seçili bir işlemde metin girebilir. Kullanıcının girdiği değiştirilmiş metni almak için onGuidedActionEditedAndProceed() değerini geçersiz kılın. Kullanıcının girişi ne zaman iptal ettiğini öğrenmek için onGuidedActionEditCanceled() politikasını da geçersiz kılabilirsiniz.
  • İşaretlenebilir radyo düğmeleri gibi davranan bir dizi işlem eklemek için, işlemleri bir grup halinde gruplandırmak üzere ortak bir kimlik değerine sahip checkSetId() kullanın. Aynı listede bulunan ve aynı onay kümesi kimliğine sahip tüm işlemler bağlı olarak kabul edilir. Kullanıcı bu kümedeki işlemlerden birini seçtiğinde bu işlem işaretlenir ve diğer tüm işlemlerin işareti kaldırılır.
  • onCreateActions() öğesinde GuidedAction.Builder yerine GuidedDatePickerAction.Builder kullanarak bir tarih seçici işlemi ekleyin. Kullanıcının girdiği değiştirilme tarihi değerini almak için onGuidedActionEditedAndProceed() değerini geçersiz kılın.
  • Kullanıcının genişletilmiş seçenekler listesinden seçim yapabilmesi için alt işlemler kullanan bir işlem ekleyin. Alt işlemler, Alt işlem ekleme bölümünde açıklanmıştır.
  • İşlemler listesinin sağ tarafında görünen ve kolayca erişilebilen bir düğme işlemi ekleyin. Düğme işlemleri, Düğme işlemleri ekle bölümünde açıklanmaktadır.

Ayrıca, hasNext(true) ayarlayarak bir işlem seçmenin yeni bir adıma yol açtığına dair görsel bir gösterge ekleyebilirsiniz.

Ayarlayabileceğiniz farklı özelliklerin tümü için GuidedAction adresine bakın.

İşlemlere yanıt vermek için onGuidedActionClicked() politikasını geçersiz kılın ve iletilen GuidedAction işlemini işleyin. GuidedAction.getId() aracını inceleyerek seçilen işlemi belirleyin.

Alt işlem ekle

Bazı işlemler, kullanıcıya ek seçenekler sunmanızı gerektirebilir. GuidedAction, alt işlemlerden oluşan bir menü olarak görüntülenen bir alt işlemler listesi belirtebilir.

Şekil 2. Açıklamalı adım alt işlemleri.

Alt işlem listesi normal işlemler veya radyo düğmesi işlemleri içerebilir, ancak tarih seçici veya düzenlenebilir metin işlemleri içeremez. Sistem birden fazla alt işlem düzeyini desteklemediğinden, bir alt işlemin kendi alt işlem grubu olamaz.

Alt işlem eklemek için önce aşağıdaki örnekte gösterildiği gibi, alt işlem görevi gören GuidedAction nesnelerin listesini oluşturun ve doldurun:

Kotlin

subActions.add(GuidedAction.Builder()
        .id(SUBACTION1)
        .title(getString(R.string.guidedstep_subaction1_title))
        .description(getString(R.string.guidedstep_subaction1_desc))
        .build())
...

Java

List<GuidedAction> subActions = new ArrayList<GuidedAction>();
subActions.add(new GuidedAction.Builder()
       .id(SUBACTION1)
       .title(getString(R.string.guidedstep_subaction1_title))
       .description(getString(R.string.guidedstep_subaction1_desc))
       .build());
...

onCreateActions() öğesinde, seçildiğinde alt işlemlerin listesini görüntüleyen bir üst düzey GuidedAction oluşturun:

Kotlin

    ...
    actions.add(GuidedAction.Builder()
            .id(SUBACTIONS)
            .title(getString(R.string.guidedstep_subactions_title))
            .description(getString(R.string.guidedstep_subactions_desc))
            .subActions(subActions)
            .build())
    ...

Java

@Override
public void onCreateActions(List<GuidedAction> actions, Bundle savedInstanceState) {
...
    actions.add(new GuidedAction.Builder()
           .id(SUBACTIONS)
           .title(getString(R.string.guidedstep_subactions_title))
           .description(getString(R.string.guidedstep_subactions_desc))
           .subActions(subActions)
           .build());
...
}

Son olarak, onSubGuidedActionClicked() geçersiz kılınarak alt işlem seçimlerine yanıt verin:

Kotlin

override fun onSubGuidedActionClicked(action: GuidedAction): Boolean {
    // Check for which action was clicked and handle as needed
    when(action.id) {
        SUBACTION1 -> {
            // Subaction 1 selected
        }
    }
    // Return true to collapse the subactions menu or
    // false to keep the menu expanded
    return true
}

Java

@Override
public boolean onSubGuidedActionClicked(GuidedAction action) {
   // Check for which action was clicked and handle as needed
   if (action.getId() == SUBACTION1) {
       // Subaction 1 selected
   }
   // Return true to collapse the subactions menu or
   // false to keep the menu expanded
   return true;
}

Düğme işlemleri ekleme

Açıklamalı adımınızda kapsamlı bir işlem listesi varsa kullanıcıların en sık kullanılan işlemlere erişmek için listeyi kaydırması gerekebilir. Yaygın olarak kullanılan işlemleri, işlem listesinden ayırmak için düğme işlemlerini kullanın. Düğme işlemleri, işlem listesinin yanında görünür ve kolayca gezinilebilir.

Şekil 3. Açıklamalı adım düğmesi işlemleri.

Düğme işlemleri normal işlemler gibi oluşturulur ve işlenir. Ancak düğme işlemlerini onCreateActions() yerine onCreateButtonActions() içinde oluşturursunuz. onGuidedActionClicked() ürününde düğme işlemlerine yanıt verin.

Adımlar arasında gezinme işlemleri gibi basit işlemler için düğme işlemlerini kullanın. Tarih seçici işlemini veya diğer düzenlenebilir işlemleri düğme işlemleri olarak kullanmayın. Ayrıca, düğme işlemlerinin alt işlemleri olamaz.

Rehberli adımları, açıklamalı bir adım dizisinde gruplandırın

GuidedStepSupportFragment, tek bir adımı temsil eder. Sıralı bir adım dizisi oluşturmak için dizideki bir sonraki adımı parça yığınına eklemek üzere GuidedStepSupportFragment.add() kullanarak birden fazla GuidedStepSupportFragment nesneyi gruplandırın.

Kotlin

override fun onGuidedActionClicked(action: GuidedAction) {
    val fm = fragmentManager
    when(action.id) {
        CONTINUE -> GuidedStepSupportFragment.add(fm, SecondStepFragment())
    }
}

Java

@Override
public void onGuidedActionClicked(GuidedAction action) {
    FragmentManager fm = getFragmentManager();
    if (action.getId() == CONTINUE) {
       GuidedStepSupportFragment.add(fm, new SecondStepFragment());
    }
...

Kullanıcı, TV uzaktan kumandasında Geri düğmesine basarsa cihaz, parça yığınında önceki GuidedStepSupportFragment gösterir. Önceki adıma döndüren kendi GuidedAction'inizi sağlarsanız getFragmentManager().popBackStack() yöntemini çağırarak Geri davranışını uygulayabilirsiniz. Kullanıcıyı dizide daha da önceki bir adıma döndürmeniz gerekiyorsa parça yığınındaki belirli bir GuidedStepSupportFragment öğesine dönmek için popBackStackToGuidedStepSupportFragment() tuşunu kullanın.

Kullanıcı sıranın son adımını tamamladığında, geçerli yığından GuidedStepSupportFragment örneğin tümünü kaldırmak ve orijinal üst etkinliğe dönmek için finishGuidedStepSupportFragments() kullanın. İlk GuidedStepSupportFragment, addAsRoot() kullanılarak eklenirse finishGuidedStepSupportFragments() çağrısının yapılması, üst etkinliği de kapatır.

Adım sunumunu özelleştir

GuidedStepSupportFragment sınıfı, başlık metni biçimlendirmesi veya adım geçişi animasyonları gibi sunu özelliklerini kontrol eden özel temalar kullanabilir. Özel temalar Theme_Leanback_GuidedStep öğesinden devralınmalıdır ve GuidanceStylist ile GuidedActionsStylist içinde tanımlanan özellikler için geçersiz kılma değerleri sağlayabilir.

GuidedStepSupportFragment cihazınıza özel bir tema uygulamak için aşağıdakilerden birini yapın:

  • Android manifest dosyasında android:theme özelliğini etkinlik öğesine ayarlayarak temayı üst etkinliğe uygulayın. Bu özelliğin ayarlanması, temayı tüm çocuk görünümlerine uygular ve ebeveyn etkinliğinde yalnızca GuidedStepSupportFragment nesne bulunuyorsa özel tema uygulamanın en basit yoludur.
  • Etkinliğiniz zaten özel bir tema kullanıyorsa ve etkinlikteki diğer görünümlere GuidedStepSupportFragment stilleri uygulamak istemiyorsanız mevcut özel etkinlik temanıza LeanbackGuidedStepTheme_guidedStepTheme özelliğini ekleyin. Bu özellik, yalnızca etkinliğinizdeki GuidedStepSupportFragment nesnelerinin kullandığı özel temaya işaret eder.
  • Aynı genel çok adımlı görevin parçası olan farklı etkinliklerde GuidedStepSupportFragment nesneleri kullanıyor ve tüm adımlarda tutarlı bir görsel tema kullanmak istiyorsanız GuidedStepSupportFragment.onProvideTheme() öğesini geçersiz kılıp özel temanızı döndürün.

Stil ve tema ekleme hakkında daha fazla bilgi için bkz. Stiller ve Temalar.

GuidedStepSupportFragment sınıfı, tema özelliklerine erişmek ve özellikleri uygulamak için özel stilist sınıfları kullanır. GuidanceStylist sınıfı sol rehberlik görünümünün sunumunu kontrol etmek için tema bilgilerini kullanırken GuidedActionsStylist sınıfı doğru işlem görünümünün sunumunu kontrol etmek için tema bilgilerini kullanır.

Adımlarınızın görsel stilini, tema özelleştirmenin sağladığı imkanların ötesinde özelleştirmek için GuidanceStylist veya GuidedActionsStylist alt sınıfını kullanın ve GuidedStepSupportFragment.onCreateGuidanceStylist() veya GuidedStepSupportFragment.onCreateActionsStylist() içinde alt sınıfınızı döndürün. Bu alt sınıflarda neleri özelleştirebileceğiniz hakkında ayrıntılı bilgi için GuidanceStylist ve GuidedActionsStylist belgelerine göz atın.