4

Я использую библиотеку поддержки Дизайн Google 25.0.0 В моей деятельности у меня есть относительное расположение сBottomSheetBehaviour: взгляд не связан с BottomSheetBehavior

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

Теперь, когда я ссылаться на него для добавления BottomSheetBehaviour, я получаю ошибка

java.lang.IllegalArgumentException: The view is not associated with BottomSheetBehavior 

Вот раскладка:

<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> 

А вот активность соответствующий код:

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

ответ

3

Вы неправильно app имен объявлены. Заменить строку:

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

с

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

в вашем объявлении CoordinatorLayout в файле макета.

Пространство имен tools используется для предоставления дополнительной информации о макете «инструменты» (например, IDE). Эта информация удаляется из приложения.

С другой стороны, пространство имен app является глобальным пространством имен для всех пользовательских (то есть не объявленных системой Android) атрибутов, объявленных вами или импортированными библиотеками (в вашем случае используется библиотека поддержки дизайна). Они включены в ваше приложение.

Так что же на самом деле tools namespace хорошо? Наиболее распространенное использование - лучше визуализировать предварительный просмотр макета. Предположим, например, что у вас есть TextView, который должен быть сначала пустым и заполнен позже.

Вы можете добавить атрибут в вашей декларации TextView:

tools:text="Some example text here" 

Этот текст не будет отображаться в вашем приложении. Тем не менее, предварительный просмотр макета, представленный в вашем Android Studio, будет иметь его, чтобы вы могли видеть, чего ожидать на своем мобильном устройстве.

+0

Это сработало. Как узнать, когда использовать/tools или/apk/res-auto –

+0

Я обновил свой ответ, ясно ли это сейчас? –

 Смежные вопросы

  • Нет связанных вопросов^_^