2016-10-11 2 views
0

Ich würde keine schwimmenden Tasten haben, aber ich würde gerne das gesamte Layout Pop-up, wenn eine Snackbar msg angezeigt wird. Dafür bin ich schlang meine Fragment in einen CoordinatorLayout etwa so:Wie öffne ich das ganze Fragment-Layout mit 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> 

Wo container_for_fragments Host meine Fragmente. Ich erkläre CoordinatorLayout und dann verwenden, etwa so:

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

Ich erhalte: enter image description here

Gibt es eine Möglichkeit ganzes Fragment Pop-up, wenn snackbar erscheint?

Antwort

2

Schreiben Sie Ihr eigenes Verhalten, die Snackbar zu zeigen reagiert:

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; 
    } 
} 

Dann Parameter hinzufügen app:layout_behavior zu Ihrem FrameLayout. Es ist möglich, dass, wenn FrameLayout durch Fragment ersetzt wird, das Verhalten verloren geht. Dann müssen Sie hinzufügen:

@CoordinatorLayout.DefaultBehavior(FrameLayoutBehavior.Behavior.class) 

knapp über Klasse Deklaration Ihres Fragments.

Verwandte Themen