J'essayais d'implémenter le nouveau BottomAppBar qui ressemble généralement à ceci: Material BottomAppBar en tant que BottomNavigationView, comme dans l'application principale de Google qui ressemble à ceci .
Mon problème est que, puisque je ne peux remplir le BottomAppBar qu'avec une ressource de menu, je ne comprends pas comment aligner mes boutons pour qu'ils ressemblent à un BottomNavigationView (mais avec le "cut" du bouton Fab) au lieu de tout aligner d'un côté. de la BottomAppBar.
Comment puis-je ajouter une mise en page personnalisée dans ce nouveau matériau BottomAppBar?
Ou au lieu de cela, y a-t-il un moyen d'implémenter BottomNavigationView avec le "cut" pour pour le bouton Fab (en gardant des animations froides par défaut comme le nouveau BottomAppBar)?
RÉSOLU
Fondamentalement, au lieu d'essayer de forcer les ressources de menu à la disposition dont j'avais besoin, j'ai utilisé cette solution à la place, je viens de placer un LinearLayout à l'intérieur du BottomAppBar en utilisant l'élément "vide" comme @dglozano l'a suggéré.
En utilisant ?attr/selectableItemBackgroundBorderless
, je suis également capable d’obtenir un effet qui est vraiment similaire à BottomNavigationView.
<com.google.Android.material.bottomappbar.BottomAppBar
Android:id="@+id/bar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom"
Android:gravity="center"
app:layout_anchorGravity="start"
app:hideOnScroll="true"
app:fabAnimationMode="scale"
app:fabAlignmentMode="center"
app:backgroundTint="@color/colorPrimary">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:weightSum="5"
Android:paddingEnd="16dp">
<ImageButton
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
app:srcCompat="@drawable/ic_home_white_24dp"
Android:background="?attr/selectableItemBackgroundBorderless"
Android:tint="@color/secondary_text"/>
<ImageButton
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
app:srcCompat="@drawable/ic_map_black_24dp"
Android:background="?attr/selectableItemBackgroundBorderless"/>
<ImageButton
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:background="@Android:color/transparent"/>
<ImageButton
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
app:srcCompat="@drawable/ic_people_white_24dp"
Android:background="?attr/selectableItemBackgroundBorderless"/>
<ImageButton
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
app:srcCompat="@drawable/ic_account_circle_24dp"
Android:background="?attr/selectableItemBackgroundBorderless"/>
</LinearLayout>
</com.google.Android.material.bottomappbar.BottomAppBar>
1 - Inclure Maven dans votre référentiel dans build.gradle
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
}
2 - Placez la dépendance des composants du matériau dans votre build.gradle.
. Notez que la version du matériau est régulièrement mise à jour.
implementation 'com.google.Android.material:material:1.0.0-alpha1'
3 - Définissez compileSdkVersion et targetSdkVersion sur la dernière version de l'API destinée à Android P, qui est la 28.
4 - Assurez-vous que votre application hérite du thème Theme.MaterialComponents
afin de permettre à BottomAppBar
d'utiliser le dernier style. Vous pouvez également déclarer le style pour BottomAppBar
dans la déclaration du widget dans le fichier XML de présentation comme suit.
style=”@style/Widget.MaterialComponents.BottomAppBar”
5 - Vous pouvez inclure BottomAppBar dans votre présentation comme suit. BottomAppBar doit être un enfant de CoordinatorLayout.
<com.google.Android.material.bottomappbar.BottomAppBar
Android:id="@+id/bottom_app_bar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom"
app:backgroundTint="@color/colorPrimary"
app:fabAlignmentMode="center"
app:fabAttached="true"
app:navigationIcon="@drawable/baseline_menu_white_24"/>
6 - Vous pouvez ancrer un bouton d'action flottante (FAB) à BottomAppBar en spécifiant l'ID de l'attribut BottomAppBar dans app: layout_anchor de FAB. BottomAppBar peut bercer FAB avec un fond en forme ou FAB peut chevaucher BottomAppBar.
<com.google.Android.material.floatingactionbutton.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/baseline_add_white_24"
app:layout_anchor="@id/bottom_app_bar" />
7 - Vous pouvez utiliser de nombreux attributs pour configurer la barre de navigation inférieure et l'icône de la fab.
8 -Vérifiez ce post moyen pour une explication plus complète.
UPDATE: Cochez la réponse du PO pour la solution finale à son problème particulier.
Placez bottomAppBar sous votre bottomNavigationView avec un arrière-plan transparent. Et ajoutez un élément de menu vide à menu.xml pour libérer de l'espace pour le FAB.
XML:
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/lt_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/white"
Android:fitsSystemWindows="false">
<ViewPager
Android:id="@+id/main_pager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginBottom="56dp"
Android:layout_above="@+id/bottom_navigation"
Android:layout_alignParentStart="true" />
<com.google.Android.material.bottomnavigation.BottomNavigationView
Android:id="@+id/bottom_navigation"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:labelVisibilityMode="labeled"
Android:layout_gravity="bottom"
Android:layout_alignParentBottom="true"
Android:background="@color/transparent"
app:menu="@menu/bottom_menu" />
<com.google.Android.material.bottomappbar.BottomAppBar
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:id="@+id/bottom_bar"
Android:layout_gravity="bottom"/>
<com.google.Android.material.floatingactionbutton.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:layout_anchor="@id/bottom_bar"/>