Com a nova biblioteca de design, há vários novos layouts que mudam muito a forma como a barra de ferramentas pode se comportar se o desenvolvedor assim desejar. Uma vez que fragmentos diferentes têm comportamentos e objetivos diferentes, por exemplo, um fragmento de galeria com uma barra de ferramentas recolhida mostrando uma foto importante, ou um fragmento sem uma visualização de rolagem que simplesmente não precisa do appbarlayout para ocultar a barra de ferramentas, ter uma única barra de ferramentas na atividade pode provar difícil.
Com isso, devo mover a barra de ferramentas para cada fragmento? Nesse caso, tenho que definir o supportActionBar cada vez que mostrar um fragmento e também ter uma referência da atividade no fragmento que anula a natureza independente dos fragmentos. Se eu deixar a barra de ferramentas sozinha na Activity, tenho que ter vários layouts definidos para cada tipo de comportamento em cada fragmento. Qual seria a melhor abordagem?
fonte
Respostas:
Para mim, parece muito estranho ter appbar e barra de ferramentas em cada fragmento. Portanto, optei por ter uma única barra de aplicativos com barra de ferramentas em atividade.
Para resolver esse problema com o CoordinatorLayout, você terá que definir um comportamento diferente do seu
FrameLayout
(ou de qualquer outro Layout) que deveria conter fragmentos de cada fragmento que você deseja substituir o comportamento padrão.Vamos supor que seu comportamento padrão seja
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Então, em seu fragment_activity_layout.xml você pode ter algo assim:
E em cada fragmento que você não deseja implementar,
app:layout_behavior="@string/appbar_scrolling_view_behavior"
você terá que substituironAttach
eonDetach
métodos que irão mudar o comportamento de seuFrameLayout
:Depois disso, o CoordinatorLayout não recolherá o appbar etc. e permitirá que os layouts de fragmento tenham altura total.
fonte
onLoadFinished
, é possível que você gostaria de mostrar a imagem centralizada notificando que não há nada aqui, como no Inbox App), mas ainda não tentei. Talvez mais tarde hoje.enableCoordinator(Activity activity)
/disableCoordinator(Activity activity)
de fragmentos.Aqui está minha solução
fonte
Esta é uma pergunta muito boa: os
Toolbar
s devem agir como umActionBar
ser mantidos em umActivity
ou umFragment
? Depois de pesquisar diferentes questões e documentação, não consegui encontrar uma solução que abranja todos os casos. Portanto, realmente depende da sua situação e do caminho a seguir.Caso 1: a barra de ferramentas deve ser uma substituição da ActionBar
Se a barra de ferramentas tiver que se comportar como uma ActionBar normal (ou se no máximo 1 fragmento for mostrado de vez em quando), acho que a maneira melhor / mais simples é usar a
Activities
barra de ferramentas tradicional com sua própria barra de ferramentas e colocar seu fragmento nela. Desta forma, você não precisa se preocupar com quando qual barra de ferramentas deve ser exibida.Alterar a ActionBar (-behaviour) de Fragments também é possível, mas eu não recomendo, já que isso força você a acompanhar qual Fragment alterou a ActionBar quando. Eu nem sei se a configuração da ActionBar pode ser feita várias vezes.
Caso 2: cada fragmento deve ter sua própria (parte da) barra de ferramentas
Você também pode optar por colocar diferentes barras de ferramentas independentes em diferentes fragmentos, com suas próprias ações. Desta forma, você pode exibir fragmentos diferentes lado a lado - cada um com suas próprias ações em sua barra de ferramentas - e sugerir que seja uma barra de ferramentas (talvez como o aplicativo do Gmail, embora eu não tenha certeza). No entanto, isso significa que você mesmo teria que inflar essas barras de ferramentas, mas não deve ser muito difícil.
Espero que isso ajude a fazer uma escolha.
(Desculpe se cometi algum erro de (idioma))
fonte