RuntimeException: не удалось раздуть подкласс Behavior

Я новичок в Android, и у меня проблемы с поведением FloatingActionButton

Мой пользовательский класс поведения:

public class ScrollingFABBehavior extends FloatingActionButton.Behavior {
    private static final String TAG = "ScrollingFABBehavior";

    public ScrollingFABBehavior(Context context, AttributeSet attrs,
            Handler mHandler) {
        super();
    }

    @Override
    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,
            FloatingActionButton child, View directTargetChild, View target,
            int nestedScrollAxes) {
        return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
                || super.onStartNestedScroll(coordinatorLayout, child,
                        directTargetChild, target, nestedScrollAxes);
    }

    @Override
    public void onNestedScroll(CoordinatorLayout coordinatorLayout,
            FloatingActionButton child, View target, int dxConsumed,
            int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed,
                dyConsumed, dxUnconsumed, dyUnconsumed);
        if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
            child.hide();
        } else if (dyConsumed < 0 && child.getVisibility() == View.GONE) {
            child.show();
        }
    }

    @Override
    public void onStopNestedScroll(CoordinatorLayout coordinatorLayout,
            FloatingActionButton
            child, View target) {
        super.onStopNestedScroll(coordinatorLayout, child, target);
    }
}

Фрагмент XML:

...

<android.support.design.widget.FloatingActionButton
        android:id="@+id/share_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:contentDescription="@string/action_share"
        android:elevation="@dimen/fab_elevation"
        android:src="@drawable/ic_share"
        app:layout_behavior=".ScrollingFABBehavior"/>

</android.support.design.widget.CoordinatorLayout>

RuntimeError, когда фрагмент раздувает xml:

07-14 08:52:43.904 30785-30785/com.example.xyzreader E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.example.xyzreader, PID: 30785
                                                                       android.view.InflateException: Binary XML file line #115: Could not inflate Behavior subclass com.example.xyzreader.ui.ScrollingFABBehavior
                                                                       Caused by: java.lang.RuntimeException: Could not inflate Behavior subclass com.example.xyzreader.ui.ScrollingFABBehavior
                                                                           at android.support.design.widget.CoordinatorLayout.parseBehavior(CoordinatorLayout.java:615)
                                                                           at android.support.design.widget.CoordinatorLayout$LayoutParams.<init>(CoordinatorLayout.java:2652)

e.t.c

Что случилось?


person Aleksey Leonov    schedule 14.07.2017    source источник
comment
неправильный конструктор....   -  person Selvin    schedule 14.07.2017
comment
Измените на: public ScrollingFABBehavior() { super(); } . Ничего не меняется   -  person Aleksey Leonov    schedule 14.07.2017


Ответы (9)


Добавьте следующие два конструктора к вашему FooterBehavior:

public FooterBehavior() {
}

public FooterBehavior(Context context, AttributeSet attrs) {
    super(context, attrs);
}
person PangoSea    schedule 04.09.2017
comment
не помогает в моем случае - person Leo Droidcoder; 07.06.2019
comment
Версия Котлина: class ScrollingFABBehavior(context: Context?, attrs: AttributeSet?) : FloatingActionButton.Behavior(context, attrs) { constructor() : this(null, null) } - person Alqueraf; 10.03.2020
comment
Возможна упрощенная версия Kotlin: class ScrollingFABBehavior @JvmOverloads constructor(context: Context? = null, attrs: AttributeSet? = null) {...} - person S-Sh; 12.03.2021

Убедитесь, что вы используете правильный путь к пользовательскому классу поведения.

Например:

app:layout_behavior="net.company.myapp.view.behavior.TextViewBehavior"
person Mahmoud    schedule 02.05.2019
comment
В моем случае Android Studio изменила мой абсолютный путь на относительный путь. Имя моего пакета отличается от идентификатора, поэтому оно нарушало его. - person P Fuster; 15.10.2019
comment
Попробуйте использовать абсолютный путь для подкласса поведения вместо относительного пути, так как во время выполнения Android может быть не в состоянии определить относительный путь. - person Abhishek; 28.11.2019

Если вы используете AndroidX (проект с открытым исходным кодом, который команда Android использует для разработки, тестирования, упаковки, версии и выпуска библиотек в Jetpack), вам необходимо обновить XML.

Найдите свой элемент здесь и замените:

Поддерживать:

android.support.design.widget.FloatingActionButton

AndroidX:

com.google.android.material.floatingactionbutton.FloatingActionButton
person Md Imran Choudhury    schedule 01.04.2019

Если вы используете BottomSheet в Android X, вы должны использовать

app:layout_behavior="@string/bottom_sheet_behavior"

если нет то используйте

app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
person Ram Chhabra    schedule 27.06.2020

Если идентификатор пакета вашего приложения отличается от фактической структуры пакета, убедитесь, что вы указали полный путь к своему пользовательскому классу поведения:

<android.support.design.widget.FloatingActionButton
        ...
        app:layout_behavior="com.example.xyzreader.ScrollingFABBehavior"/>
person marius bardan    schedule 06.11.2019

Решено. Изменить app:layout_behavior=".ScrollingFABBehavior"/> на app:layout_behavior=".ui.ScrollingFABBehavior"/>

person Aleksey Leonov    schedule 14.07.2017
comment
Как это поможет кому-нибудь? кто знает вашу подпись пакета и какую ошибку вы допустили непонятно. - person Ishaan; 15.05.2019
comment
На самом деле он прав, для меня сработало имя всего пакета, а не только имя класса. - person Benjamin Ledet; 13.01.2020

У меня была аналогичная проблема, и я оказался на этой странице.

Я работаю с Bottom Sheet на Android X

Я запустил свое приложение и получил следующее сообщение об ошибке, когда я нажал, чтобы перейти к новому фрагменту в приложении, и приложение аварийно завершилось с ошибкой RuntimeExeception: Не удалось раздуть подкласс поведения com.google.android.material.bottomsheet.BottomSheetBehaviour< /сильный>

Мои атрибуты макета были следующими:

<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/player_bg"
    app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehaviour"
    app:behavior_hideable="true"
    app:behavior_peekHeight="70dp">

Когда я получил это сообщение об ошибке, я изменил одну строку, и тогда приложение заработало.

Как описано выше, поскольку я использую Android X, я изменился с:

app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehaviour"

Я изменил эту строку на:

app:layout_behavior="@string/bottom_sheet_behavior"

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

person Jason Braithwaite    schedule 23.08.2020

Если вы работаете с androidX, то ваш корневой макет должен быть:

<androidx.coordinatorlayout.widget.CoordinatorLayout

и макет bottom_sheet должен включать:

app:layout_behavior="@string/bottom_sheet_behavior"

иначе, если вы не используете androidx или не используете библиотеку поддержки, ваш корневой макет должен быть:

<android.support.design.widget.CoordinatorLayout

и макет bottom_sheet должен включать:

app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
person Ahsan Malik    schedule 30.06.2020

Если вы используете зависимости Androidx Jetpack, тогда

заменять

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

с

app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
person Aditya Sharma    schedule 08.06.2021