Android FloatingActionButton和奇怪的行为

Android FloatingActionButton和奇怪的行为,android,android-support-library,floating-action-button,android-snackbar,Android,Android Support Library,Floating Action Button,Android Snackbar,使用CoordinatorLayout.Behavior和FloatingActionButton时,我遇到了一些奇怪的事情 以下是一个片段: public class BottomFloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> { public BottomFloatingActionButtonBehavior() { } publ

使用CoordinatorLayout.Behavior和FloatingActionButton时,我遇到了一些奇怪的事情

以下是一个片段:

public class BottomFloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> {
    public BottomFloatingActionButtonBehavior() {
    }

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

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
        return (dependency instanceof BottomNavigation);
    }

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
        if (dependency instanceof BottomNavigation) {
            BottomNavigation bottomNavigation = (BottomNavigation) dependency;
            int height = bottomNavigation.getNavigationHeight() - bottomNavigation.getBottomInset();
            float offset = bottomNavigation.getTranslationY() - height;
            child.setTranslationY(offset);
            return true;
        }

        return false;
    }
}
公共类BottomFloatingActionButtonBehavior扩展了CoordinatorLayout.Behavior{
公共底部浮动ActionButtonBehavior(){
}
公共底部浮动ActionButtonBehavior(上下文上下文,属性集属性){
超级(上下文,attrs);
}
@凌驾
公共布尔布局依赖项(CoordinatorLayoutDependson父项、FloatingActionButton子项、视图依赖项){
返回(BottomNavigation的依赖实例);
}
@凌驾
公共布尔onDependentViewChanged(CoordinatorLayout父项、FloatingActionButton子项、视图依赖项){
if(BottomNavigation的依赖项实例){
BottomNavigation BottomNavigation=(BottomNavigation)依赖项;
int height=bottomNavigation.getNavigationHeight()-bottomNavigation.getBottomInset();
float offset=bottomNavigation.getTranslationY()-高度;
child.setTranslationY(偏移量);
返回true;
}
返回false;
}
}
使用此行为时,我会在按钮上添加奇怪的边距:

然后,隐藏按钮并再次显示(在片段之间导航)时,边距增加,但仅增加一次(每次迭代后不要增加):

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<layout 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"
    tools:context=".Activities.MainActivity">

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/layout_coordinator"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/app_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_main"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

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

        <FrameLayout
            android:id="@+id/frame_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

        <it.sephiroth.android.library.bottomnavigation.BottomNavigation
            android:id="@+id/navigation_bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:layout_behavior="@string/bbn_appbar_behavior"
            app:bbn_entries="@menu/activity_main_navigation" />

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/button_action"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end|bottom"
            app:borderWidth="0dp"
            app:fabSize="normal"
            app:layout_behavior="it.sephiroth.android.library.bottomnavigation.BottomFloatingActionButtonBehavior"
            app:srcCompat="@drawable/ic_fa_plus_white_24dp"
            app:useCompatPadding="true"/>

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

但是这个类自己控制snackbar,所以它对我不起作用


这是在牛轧糖和KitKat版本上使用最新(以及以前的)support lib:25.2.0进行测试的。不同之处在于,KitKat没有“第二个换档阶段”。边距从一开始就显示出来。

尝试将
android:minWidth
android:minHeight
设置为
0dp

    <android.support.design.widget.FloatingActionButton
        android:minWidth="0dp"
        android:minHeight="0dp"
        android:id="@+id/button_action"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        app:borderWidth="0dp"
        app:fabSize="normal"
        app:layout_behavior="it.sephiroth.android.library.bottomnavigation.BottomFloatingActionButtonBehavior"
        app:srcCompat="@drawable/ic_fa_plus_white_24dp"
        app:useCompatPadding="true"/>


您是否尝试放置
app:useCompatPadding=“false”
?对于这种简单的情况,您真的需要行为吗?为什么不使用垂直线性布局为这2个,并得到所有的事情在常规布局阶段完成?谢谢。它对牛轧糖有帮助,但对KitKat没有帮助。关于使用线性布局,可能还有其他建议吗。我的布局有一个“动态”应用程序栏和底部栏(它们会在滚动时做出反应)。我还需要对snackbar做出反应。不确定线性布局是否有帮助。不幸的是,它没有帮助。