2016-10-11 6 views
0

浮動ボタンはありませんが、スナークバーmsgが表示されているときにレイアウト全体をポップアップしたいと思います。そのために私はそうのようなCoordinatorLayoutに私のフラグメントをラッピングしています:Android snackbarでフラグメント全体のポップアップを表示する方法

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/coordinatorLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:id="@+id/container_for_fragments" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white"/> 

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

どこcontainer_for_fragmentsホストは私の破片を。私はCoordinatorLayoutを宣言して、そのようにそれを使用します。

 Snackbar snackbar = Snackbar.make(myCoordinatorLayout, "Hello", Snackbar.LENGTH_LONG); 
     snackbar.show(); 

私は取得しています:enter image description here

はスナックバーが表示されたら、全体の断片をポップアップ表示する方法はありますか?

答えて

2

Snackbarを示すに反応し、独自の行動を、書く:

public class FrameLayoutBehavior extends CoordinatorLayout.Behavior<FrameLayout> { 

    private float mFrTranslationY; 

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

    @Override 
    public boolean layoutDependsOn(final CoordinatorLayout parent, final FrameLayout child, final View dependency) { 
     return dependency instanceof Snackbar.SnackbarLayout; 
    } 

    @Override 
    public boolean onDependentViewChanged(final CoordinatorLayout parent, final FrameLayout child, final View dependency) { 
     if (dependency instanceof Snackbar.SnackbarLayout) { 
      updateFabTranslationForSnackbar(parent, child, dependency); 
      ViewCompat.setTranslationY(child, mFrTranslationY); 
     } 
     return false; 
    } 

    @Override 
    public void onDependentViewRemoved(final CoordinatorLayout parent, final FrameLayout child, final View dependency) { 
     super.onDependentViewRemoved(parent, child, dependency); 
    } 

    private void updateFabTranslationForSnackbar(CoordinatorLayout parent, final FrameLayout fab, View snackbar) { 
     mFrTranslationY = getFabTranslationYForSnackbar(parent, fab, snackbar); 
    } 

    private float getFabTranslationYForSnackbar(CoordinatorLayout parent, FrameLayout fab, View snackbar) { 
     float minOffset = 0; 
     minOffset = Math.min(minOffset, ViewCompat.getTranslationY(snackbar) - snackbar.getHeight()); 
     return minOffset; 
    } 
} 

次に、あなたのFrameLayoutにパラメータapp:layout_behaviorを追加します。 FrameLayoutFragmentに置き換えると、動作が失われる可能性があります。次に、追加する必要があります:

@CoordinatorLayout.DefaultBehavior(FrameLayoutBehavior.Behavior.class) 

フラグメントのクラス宣言のすぐ上に追加する必要があります。

関連する問題