RuntimeException:无法使行为子类膨胀

时间:2017-07-14 10:42:11

标签: java android coordinator-layout

我是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>
片段膨胀时的

运行时错误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

怎么了?

9 个答案:

答案 0 :(得分:28)

将以下两个构造函数添加到FooterBehavior

public FooterBehavior() {
}

public FooterBehavior(Context context, AttributeSet attrs) {
    super(context, attrs);
}

答案 1 :(得分:2)

解决。将app:layout_behavior=".ScrollingFABBehavior"/>更改为app:layout_behavior=".ui.ScrollingFABBehavior"/>

答案 2 :(得分:2)

如果您在Android X中使用BottomSheet,则必须使用

app:layout_behavior="@string/bottom_sheet_behavior"

如果没有,则使用

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

答案 3 :(得分:1)

如果您使用的是AndroidX(Android团队用来在Jetpack中开发,测试,打包,版本和发布库的开源项目),则需要更新XML。

在此处找到您的元素(https://developer.android.com/jetpack/androidx/migrate)并回复:

支持:

android.support.design.widget.FloatingActionButton

AndroidX:

com.google.android.material.floatingactionbutton.FloatingActionButton

答案 4 :(得分:1)

如果您使用的是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"

答案 5 :(得分:1)

我遇到了类似的问题,并最终显示在此页面上。

我正在使用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"

这一更改意味着该代码对我有用,没有崩溃,并且新的Fragment出现了预期的结果。

答案 6 :(得分:0)

确保您使用的是自定义行为类的正确路径。

例如:

app:layout_behavior="net.company.myapp.view.behavior.TextViewBehavior"

答案 7 :(得分:0)

如果您的应用程序的包ID与实际的包结构不同,请确保指定自定义行为类的完整路径:

<android.support.design.widget.FloatingActionButton
        ...
        app:layout_behavior="com.example.xyzreader.ScrollingFABBehavior"/>

答案 8 :(得分:0)

如果您使用的是 Androidx Jetpack 依赖项,则

替换

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

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