RuntimeException:无法使行为子类膨胀

Ale*_*nov 14 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

片段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>
Run Code Online (Sandbox Code Playgroud)

片段膨胀xml时的RuntimeError:

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)
Run Code Online (Sandbox Code Playgroud)

等等

怎么了?

小智 32

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

public FooterBehavior() {
}

public FooterBehavior(Context context, AttributeSet attrs) {
    super(context, attrs);
}
Run Code Online (Sandbox Code Playgroud)

  • Kotlin 版本: ```class ScrollingFABBehavior(context: Context?, attrs: AttributeSet?) : FloatingActionButton.Behavior(context, attrs) { constructor() : this(null, null) } ``` (3认同)

Ram*_*bra 11

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

app:layout_behavior="@string/bottom_sheet_behavior"
Run Code Online (Sandbox Code Playgroud)

如果没有,那么使用

app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
Run Code Online (Sandbox Code Playgroud)


Md *_*ury 9

If you are using AndroidX (open-source project that the Android team uses to develop, test, package, version and release libraries within Jetpack) then you need to update XML.

Find your element here and replace:

Support:

android.support.design.widget.FloatingActionButton
Run Code Online (Sandbox Code Playgroud)

AndroidX:

com.google.android.material.floatingactionbutton.FloatingActionButton
Run Code Online (Sandbox Code Playgroud)


mar*_*dan 9

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

<android.support.design.widget.FloatingActionButton
        ...
        app:layout_behavior="com.example.xyzreader.ScrollingFABBehavior"/>
Run Code Online (Sandbox Code Playgroud)


Mah*_*oud 6

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

例如:

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

  • 尝试对行为子类使用 **绝对路径** 而不是 **相对路径**,因为在运行时 Android 可能无法解析相对路径 (8认同)
  • 就我而言,Android Studio 将绝对路径更改为相对路径。我的包名称与 id 不同,所以它破坏了它。 (4认同)

Ale*_*nov 4

解决了。改成app:layout_behavior=".ScrollingFABBehavior"/>app:layout_behavior=".ui.ScrollingFABBehavior"/>

  • 这对任何人有什么帮助?谁知道你的包裹签名以及你犯了什么错误还不清楚。 (7认同)