J'utilise Google Design Support Library 25.0.0 Dans mon activité, j'ai une disposition relative avec
app:layout_behavior="Android.support.design.widget.BottomSheetBehavior"
Maintenant, quand je le référence pour ajouter BottomSheetBehaviour, j'obtiens l'erreur
Java.lang.IllegalArgumentException: The view is not associated with BottomSheetBehavior
Voici la mise en page:
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:map="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/maps_colayout"
xmlns:app="http://schemas.Android.com/tools"
Android:fitsSystemWindows="true"
Android:background="@color/white">
...
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="280dp"
Android:layout_gravity="bottom"
Android:id="@+id/rl_bottomsheet"
Android:background="#F3F3F3"
app:layout_behavior="Android.support.design.widget.BottomSheetBehavior">
...
</RelativeLayout>
Et voici le code correspondant à l'activité:
CoordinatorLayout colayout = (CoordinatorLayout) findViewById(R.id.maps_colayout);
View bottomSheet = colayout.findViewById(R.id.rl_bottomsheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
}
});
Vous devrez ajouter cette ligne dans votre balise de disposition linéaire. Celui qui est référencé.
app:layout_behavior="Android.support.design.widget.BottomSheetBehavior"
ou pour Android x
app:layout_behavior="com.google.Android.material.bottomsheet.BottomSheetBehavior"
L'espace de noms app
est incorrect. Remplacer la ligne:
xmlns:app="http://schemas.Android.com/tools"
avec
xmlns:app="http://schemas.Android.com/apk/res-auto"
dans votre déclaration CoordinatorLayout dans le fichier de mise en page.
L'espace de noms tools
est utilisé pour fournir des informations supplémentaires sur la mise en page aux "outils" (par exemple IDE). Ces informations sont supprimées de l'application.
D'un autre côté, l'espace de noms app
est un espace de noms global pour tous les attributs personnalisés (c'est-à-dire non déclarés par les attributs Android system), déclarés par vous ou par les bibliothèques importées (la bibliothèque de support de conception est votre cas.) Ceux-ci sont inclus dans votre application.
Alors, à quoi sert réellement tools
namespace? L'utilisation la plus courante est de mieux rendre l'aperçu de votre mise en page. Supposons par exemple que vous avez un TextView, qui devrait être initialement vide et rempli plus tard.
Vous pouvez ajouter un attribut à votre déclaration TextView:
tools:text="Some example text here"
Ce texte ne sera pas affiché dans votre application. Cependant, l'aperçu de la mise en page rendu dans votre Android Studio l'aura, afin que vous puissiez voir à quoi vous attendre sur votre appareil mobile.
Tout d'abord, si vous utilisez androidX, "app:layout_behavior="@string/bottom_sheet_behavior"
" ou app:layout_behavior="com.google.Android.material.bottomsheet.BottomSheetBehavior"
Deuxièmement, la vue avec le comportement de la feuille de fond doit être un enfant direct de la disposition du coordinateur.
Enfin, supprimez layout_width
et layout_height
attribut de cet élément s'il l'est. Faites-le par programme, si nécessaire.