浮动动作按钮不能上下移动

问题描述:

问题:我已经实现了FloatingActionButton,我遵循了Androidhive的示例。但是,如果显示SnackBarFloatingActionButton不会向上移动。浮动动作按钮不能上下移动

问题:如果FloatingActionButton会出现SnackBar会上下移动,我该如何实现?

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout android:id="@+id/maschineCoordinatorLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:fitsSystemWindows="true" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appBar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.ActionBar"> 

     <include 
      android:id="@+id/toolbar_main" 
      layout="@layout/toolbar"></include> 

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

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

    <com.github.jorgecastilloprz.FABProgressCircle 
     android:id="@+id/fabProgressCircle_download_maschinen" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     > 

     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/fab_download_maschinen" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:borderWidth="0dp" 
      app:elevation="@dimen/fab_elevation" 
      android:layout_margin="@dimen/fab_margin" 
      android:src="@android:drawable/ic_dialog_email" /> 

    </com.github.jorgecastilloprz.FABProgressCircle> 

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

这里是FloatingAction行为类

FloatingActionButtonBehavior.java

public class FloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> { 

    public FloatingActionButtonBehavior(Context context, AttributeSet attrs) { 
    } 

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

    @Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) { 
    float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); 
    child.setTranslationY(translationY); 
    return true; 
    } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     Snackbar.make(view, "Hello Snackbar", Snackbar.LENGTH_LONG).show(); 
     } 
    }); 
    } 
} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.getbase.floatingactionbutton.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end|bottom" 
     android:layout_margin="16dp" 
     app:layout_behavior="com.getbase.coordinatorlayoutdemo.FloatingActionButtonBehavior" 
     app:fab_icon="@drawable/ic_done" /> 

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

输出:

enter image description here

有关更多详情,请这样的:https://github.com/ggajews/coordinatorlayoutwithfabdemo

+0

我加入您的建议我的代码。不幸的是,按钮仍然不想移动。 FABProgressCircle可能是这里的问题吗? – jublikon

+0

你是否需要进步? – Ironman

+0

是的,我需要进度指标。是否有可能实施移动行为? – jublikon

我想你没有实现FABProgressListener接口

如果不是你已经这样做了。

你应该使用小吃吧象下面这样:

@Override public void onFABProgressAnimationEnd() { 
    Snackbar.make(fabProgressCircle, R.string.cloud_upload_complete, Snackbar.LENGTH_LONG) 
     .setAction("Action", null) 
     .show(); 
} 

做你的芦苇this page

+0

你能解释一下为什么需要它吗?不幸的是即使progres指示器没有显示,按钮也不会移动 – jublikon

+0

我在[this page]里面(https://github.com/JorgeCastilloPrz/FABProgressCircle)告诉你什么时候实现FABProgressListener接口,你应该使用类似于示例代码的零食吧。因为以下方法调用将在正确的时间发送 –

我正在使用com.android.support:design:24.2.0并为此工作,你需要把你的FAB放在CoordinatorLayout中,我不知道你是否可以像你一样包装。 然后在您的FAB写:

app:layout_anchor="@id/maschinelistcontainer" 
app:layout_anchorGravity="bottom|right|end" 

像这样:

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab_download_maschinen" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentEnd="true" 
    android:layout_gravity="bottom|end" 
    app:borderWidth="0dp" 
    app:elevation="@dimen/fab_elevation" 
    android:layout_margin="@dimen/fab_margin" 
    android:src="@android:drawable/ic_dialog_email" 
    app:layout_anchor="@id/maschinelistcontainer" 
    app:layout_anchorGravity="bottom|right|end"  /> 

有关详细信息:https://code.google.com/p/android/issues/detail?id=220250