0

Ich habe eine App mit Scrolling-Aktivität aus dem Android Studio Schablonen Erstellt meine Codierung meiner Haupt App zu testen, wirkt sich dieses Verhalten oder nicht, so habe ich nur hinzufügen, um den Code:Snackbar und CollapsingToolbarLayout mit TranslucentNavigation

<item name="android:windowTranslucentNavigation" tools:targetApi="kitkat">true</item> 

, die die Snackbar hinter der Navigationsleiste als diesen Screenshot zeigt (PS: Ich benutze Xstane für die Neugestaltung meiner Navigationsleiste auf meinem Handy, aber ich denke, das hat keinen Einfluss auf den Code weil ich TranslucentNavigation mit Snackbar ohne CollapsingToolbarLayout probiert habe und das funktioniert)

enter image description here

die App

  • windowTranslucentNavigation
  • Snackbar
  • CollapsingToolbarLayout
  • FloatingActionButton

Und Dies ist der Code des Haupt xml unterstützt

<?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" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context=".testscanbarwithcollapsing.ScrollingActivity" 
> 

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

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     > 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:popupTheme="@style/AppTheme.PopupOverlay" 
      /> 

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

<include layout="@layout/content_scrolling"/> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="@dimen/fab_margin" 
    app:layout_anchor="@id/app_bar" 
    app:layout_anchorGravity="bottom|end" 
    app:srcCompat="@android:drawable/ic_dialog_email" 
    /> 

AKTUALISIERT: hier der Code des onClick des FloatingButton, die die Snackbar zeigen ist (dieser Code ist in onCreate der Haupttätigkeit)

fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      fabProgressCircle.show(); 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
+0

Bitte zeigen Sie den Code, wie Sie Snackbar anzeigen. –

+0

@VipulAsri Aktualisiert –

Antwort

6
private static void show(final Activity activity, Snackbar snackbar) { 
    if (ScreenUtils.isTranslucentNavigationBar(activity)){ 
     final FrameLayout snackBarView = (FrameLayout) snackbar.getView(); 
     final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) snackBarView.getChildAt(0).getLayoutParams(); 
     params.setMargins(params.leftMargin, 
       params.topMargin, 
       params.rightMargin, 
       params.bottomMargin + ScreenUtils.getNavigationBarHeight(activity)); 

     snackBarView.getChildAt(0).setLayoutParams(params); 
    } 
    snackbar.show(); 
} 

public static boolean isTranslucentNavigationBar(Activity activity) { 
    Window w = activity.getWindow(); 
    WindowManager.LayoutParams lp = w.getAttributes(); 
    int flags = lp.flags; 
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT 
      && (flags & WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) 
      == WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; 

} 

Dieses Ideal funktioniert für mich!

+0

Vielen Dank für die Veröffentlichung Ihrer Antwort für eine alte unbeantwortete Frage: D –

+0

Ich habe es jetzt versucht es kann nicht lösen Symbol "ScreenUtils", werden Sie die Ressource dieser Bibliothek verweisen, weil ich nicht finden konnte es –

+1

Es ist meine Util-Klasse. Siehe den Namen der Methoden, die von Klasse ScreenUtils verwenden und Google verwenden :) –

Verwandte Themen