我是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
怎么了?
答案 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"