4

J'utilise Google -Design Bibliothèque 25.0.0 Dans mon activité, j'ai une disposition relative avecBottomSheetBehaviour: La vue est pas associée à BottomSheetBehavior

app:layout_behavior="android.support.design.widget.BottomSheetBehavior" 

Maintenant, quand je fais référence pour ajouter BottomSheetBehaviour, je reçois 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 l'activité code correspondant:

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 
     } 
    }); 

Répondre

3

Vous avez tort espace de noms app déclaré. Remplacer la ligne:

xmlns:app="http://schemas.android.com/tools" 

avec

xmlns:app="http://schemas.android.com/apk/res-auto" 

dans votre déclaration de 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 à "outils" (par exemple IDE). Cette information est retirée de l'application. D'autre part, 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 le système Android) déclarés par vous ou par des bibliothèques importées (la bibliothèque de conception est votre cas). Ceux-ci sont inclus dans votre application.

Alors qu'est-ce que c'est vraiment tools namespace? L'utilisation la plus courante consiste à mieux rendre l'aperçu de votre mise en page. Supposons par exemple que vous ayez 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 va pas être affiché dans votre application. Cependant, l'aperçu de la disposition rendu dans votre Android Studio l'aura, de sorte que vous pouvez voir à quoi s'attendre sur votre appareil mobile.

+0

Cela a fonctionné. Comment puis-je savoir quand utiliser/tools ou/apk/res-auto –

+0

J'ai mis à jour ma réponse, est-ce clair maintenant? –