Une application classique a souvent une vue de détail avec un CollapsingToolbar en elle. Comment pourrait-on construire qu'en vertu de ce que l'architecture?
Excellente question! J'ai du mal avec ce pour un peu ainsi et est venu à la conclusion qu'il doit y avoir une Activité avec un NavHostFragment et, idéalement, rien d'autre. Cela vous donne plus de flexibilité pour afficher (ou pas d'affichage) tout ce dont vous avez besoin pour chaque écran. Surtout, assurez-vous que votre thème supprime l'ActionBar:
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
Ce qui conduit à votre prochaine question...
Déplacer la Barre d'outils de chaque Fragment XML?
À mon avis, yup! Tout ce que vous pouvez généralement utiliser l'ActionBar pour peut être fait via une Barre d'outils. Voici un petit extrait de code qui montre comment une Barre d'outils peut être utilisé pour faire les choses les plus importantes que vous avez utilisé ActionBar dans le passé (la navigation, le titre, le menu des options, etc...):
toolbar.apply {
setNavigationOnClickListener { findNavController().navigateUp() }
setTitle(R.string.toolbar_title)
inflateMenu(R.menu.fragment_menu)
setOnMenuItemClickListener(::onMenuItemClick)
}
Mettre en œuvre l'effondrement de la barre d'outils par programmation?
Cela dépend exactement ce que vous êtes en train de faire, mais plus probablement, il n'y a pas besoin de cela. Vous pouvez déposer une AppBarLayout, CollapsingToolbarLayout, et la Barre d'outils dans votre mise en page et les utiliser comme normal. Donner votre AppBarLayout une ActionBar thème de superposition. Voici un exemple:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="@color/primary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:navigationIcon="@drawable/ic_up_white"/>
...
Déplacer le détail fragment de sa propre activité (il peut utiliser son propre deeplink de toute façon) et de "casser" la philosophie?
Pas besoin avec le haut, à droite? C'est une approche qui est suffisamment souple pour s'adapter à plusieurs niveaux facilement dans une nav graphique et toujours être en mesure de personnaliser l'apparence et le comportement de chaque destination dans le graphe (y compris ActionBar les fonctionnalités).