Seu aplicativo pode ter tarefas em várias etapas para os usuários. Por exemplo, seu app pode precisar orientar os usuários na compra de conteúdo extra, definir uma configuração complexa ou simplesmente confirmar uma decisão. Todas essas tarefas exigem orientar os usuários em uma ou mais etapas ou decisões ordenadas.
A biblioteca androidx.pes fornece classes para implementar tarefas do usuário com várias etapas. Esta página discute como usar a classe GuidedStepSupportFragment
para orientar um usuário em uma série de decisões para realizar uma tarefa. O GuidedStepSupportFragment
usa as práticas recomendadas da interface da TV para facilitar a compreensão e a navegação de tarefas com várias etapas em dispositivos de TV.
Fornecer detalhes para uma etapa
Um GuidedStepSupportFragment
representa uma única etapa em uma série. Visualmente, ela fornece uma orientação com uma lista de possíveis ações ou decisões para a etapa.
Para cada etapa da tarefa de várias etapas, estenda
GuidedStepSupportFragment
e forneça informações de contexto sobre
a etapa e as ações que o usuário pode realizar. Substitua
onCreateGuidance()
e retorne um novo
GuidanceStylist.Guidance
que contenha informações
de contexto, como título, descrição e ícone da etapa, conforme mostrado no exemplo a seguir:
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); }
Adicione a subclasse GuidedStepSupportFragment
à atividade desejada,
chamando
GuidedStepSupportFragment.add()
no método onCreate()
da atividade.
Se a atividade tiver apenas objetos GuidedStepSupportFragment
, use GuidedStepSupportFragment.addAsRoot()
em vez de add()
para adicionar os primeiros GuidedStepSupportFragment
. O uso de
addAsRoot()
ajuda a garantir que, se o usuário pressionar o botão "Voltar" no controle remoto da TV ao visualizar
o primeiro GuidedStepSupportFragment
, tanto o
GuidedStepSupportFragment
quanto a atividade mãe serão fechados.
Observação:adicione
objetos GuidedStepSupportFragment
de forma programática,
não nos arquivos XML de layout.
Criar e processar ações do usuário
Adicione ações do usuário substituindo
onCreateActions()
.
Na substituição, adicione um novo GuidedAction
para cada
item de ação e forneça a string de ação, a descrição e o ID. Use
GuidedAction.Builder
para adicionar novas ações.
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()); ...
As ações não estão limitadas a seleções de linha única. Aqui estão outros tipos de ações que você pode criar:
-
Adicione uma ação de marcador de informações para fornecer mais informações sobre as opções do usuário definindo
infoOnly(true)
. QuandoinfoOnly
for verdadeiro, os usuários não poderão selecionar a ação. -
Adicione uma ação de texto editável definindo
editable(true)
. Quandoeditable
for verdadeiro, o usuário poderá inserir texto em uma ação selecionada usando o teclado remoto ou conectado. SubstituaonGuidedActionEditedAndProceed()
para receber o texto modificado que o usuário inseriu. Você também pode modificaronGuidedActionEditCanceled()
para saber quando o usuário cancela a entrada. -
Adicione um conjunto de ações que se comportam como botões de opção marcáveis usando
checkSetId()
com um valor de ID comum para agrupar ações em um conjunto. Todas as ações na mesma lista com o mesmo ID do conjunto de verificação são consideradas vinculadas. Quando o usuário seleciona uma das ações nesse conjunto, essa ação é marcada e todas as outras são desmarcadas. -
Adicione uma ação do seletor de data usando
GuidedDatePickerAction.Builder
em vez deGuidedAction.Builder
emonCreateActions()
. ModifiqueonGuidedActionEditedAndProceed()
para receber o valor da data de modificação que o usuário inseriu. - Adicione uma ação que use subações para permitir que o usuário escolha em uma lista estendida de opções. As subações são descritas na seção Adicionar subações.
- Adicione uma ação de botão que apareça à direita da lista de ações e seja facilmente acessível. As ações do botão são descritas na seção Adicionar ações do botão.
Também é possível adicionar um indicador visual de que a seleção de uma ação
leva a uma nova etapa definindo
hasNext(true)
.
Para ver todos os diferentes atributos que podem ser definidos, consulte
GuidedAction
.
Para responder às ações, substitua
onGuidedActionClicked()
e processe o
GuidedAction
transmitido. Identifique a ação selecionada
examinando GuidedAction.getId()
.
Adicionar subações
Algumas ações podem exigir que você dê ao usuário um conjunto adicional de opções. Um
GuidedAction
pode especificar uma lista de
subações mostradas como um menu de ações filhas.
A lista de subações pode conter ações regulares ou ações do botão de opção, mas não seletor de data ou ações de texto editáveis. Além disso, uma subação não pode ter o próprio conjunto de subações, porque o sistema não oferece suporte a mais de um nível de subações.
Para adicionar subações, primeiro crie e preencha uma lista de
objetos GuidedAction
que atuam como subações, conforme mostrado no exemplo a seguir:
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()); ...
Em onCreateActions()
, crie uma GuidedAction
de nível superior que mostre a
lista de subações quando selecionada:
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()); ... }
Por fim, responda às seleções de subação substituindo
onSubGuidedActionClicked()
:
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; }
Ações do botão "Adicionar"
Se a etapa guiada tiver uma lista grande de ações, os usuários poderão precisar rolar pela lista para acessar as ações mais usadas. Use ações de botão para separar as ações mais usadas da lista. As ações do botão aparecem ao lado da lista de ações e são fáceis de navegar.
As ações do botão são criadas e processadas como as ações normais, mas elas são criadas
em
onCreateButtonActions()
,
em vez de onCreateActions()
. Responda às ações do botão em
onGuidedActionClicked()
.
Use ações de botão para ações simples, como navegação entre etapas. Não use a ação do seletor de data ou outras ações editáveis como ações do botão. Além disso, as ações do botão não podem ter subações.
Agrupar etapas guiadas em uma sequência guiada
Um GuidedStepSupportFragment
representa uma única etapa. Para criar uma sequência ordenada de etapas, agrupe vários
objetos GuidedStepSupportFragment
usando
GuidedStepSupportFragment.add()
para adicionar
a próxima etapa da sequência à pilha de fragmentos.
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()); } ...
Se o usuário pressionar o botão "Voltar" no controle remoto da TV, o dispositivo mostrará o GuidedStepSupportFragment
anterior na pilha de fragmentos. Se você
fornecer seu próprio GuidedAction
para
retornar à etapa anterior, poderá implementar o comportamento de retorno chamando
getFragmentManager().popBackStack()
.
Caso você precise retornar o usuário a uma etapa ainda mais antiga na sequência, use
popBackStackToGuidedStepSupportFragment()
para retornar a um GuidedStepSupportFragment
específico na pilha de fragmentos.
Quando o usuário terminar a última etapa da sequência, use
finishGuidedStepSupportFragments()
para remover todas as
instâncias de GuidedStepSupportFragment
da pilha atual e retornar à atividade mãe original. Se o
primeiro GuidedStepSupportFragment
for adicionado
usando addAsRoot()
, chamar
finishGuidedStepSupportFragments()
também vai fechar a atividade mãe.
Personalizar a apresentação da etapa
A classe GuidedStepSupportFragment
pode usar temas
personalizados que controlam aspectos da apresentação, como a formatação do texto do título ou as animações de transição
de etapas. Os temas personalizados precisam ser herdados de
Theme_Leanback_GuidedStep
e podem fornecer
valores de modificação para atributos definidos em
GuidanceStylist
e
GuidedActionsStylist
.
Para aplicar um tema personalizado ao GuidedStepSupportFragment
,
siga um destes procedimentos:
-
Aplique o tema à atividade mãe definindo o atributo
android:theme
para o elemento de atividade no manifesto do Android. A definição desse atributo aplica o tema a todas as visualizações filhos e é a maneira mais direta de aplicar um tema personalizado se a atividade mãe contiver apenas objetosGuidedStepSupportFragment
. -
Se a atividade já usa um tema personalizado e você não quer aplicar
estilos
GuidedStepSupportFragment
a outras visualizações na atividade, adicione o atributoLeanbackGuidedStepTheme_guidedStepTheme
ao tema personalizado já existente. Esse atributo aponta para o tema personalizado usado somente pelos objetosGuidedStepSupportFragment
na sua atividade. -
Se você usar objetos
GuidedStepSupportFragment
em atividades diferentes que fazem parte da mesma tarefa geral de várias etapas e quiser usar um tema visual consistente em todas as etapas, substituaGuidedStepSupportFragment.onProvideTheme()
e retorne o tema personalizado.
Para mais informações sobre como adicionar estilos e temas, consulte Estilos e temas.
A classe GuidedStepSupportFragment
usa classes de estilo especiais para acessar e aplicar atributos de tema.
A classe GuidanceStylist
usa informações de tema
para controlar a apresentação da visualização de orientação à esquerda, enquanto a classe
GuidedActionsStylist
usa informações de tema
para controlar a apresentação da visualização de ações à direita.
Para personalizar o estilo visual das etapas além do que a personalização de temas oferece, crie uma subclasse
GuidanceStylist
ou
GuidedActionsStylist
e retorne a subclasse em
GuidedStepSupportFragment.onCreateGuidanceStylist()
ou
GuidedStepSupportFragment.onCreateActionsStylist()
.
Para saber mais sobre o que é possível personalizar nessas subclasses, consulte a documentação sobre
GuidanceStylist
e
GuidedActionsStylist
.