15

Ich habe mit der neuen Design-Support-Bibliothek von Google gespielt und es ist eine tolle Zeit! Ich bin nur ein wenig ratlos in der Navigationsansicht. All die Dinge, die ich lese, sagen, dass die NavigationView intelligent genug ist, um transparentes Gelege allein zu behandeln. (Die android-developers Post, für einen; Suche nach Gelegen). Wie auch immer, wenn ich versuche, es zu tun bekomme ich folgendes Ergebnis:Wie bekomme ich die neue NavigationView, um mit Statusleiste Scrim zu spielen?

Transparent Scrim

Das ist sehr gut; Genau das, was ich will. Außer eine Sache. Wenn die Schublade geschlossen ist, ist der Stoff ein hässliches, dunkles Grau, nicht mein primäres ColorDark. . .

enter image description here

Hier ist mein Layout:

<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" > 

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <LinearLayout 
     android:id="@+id/linear_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

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

     <fragment 
      android:id="@+id/fragment" 
      android:name="com.gmail.rixx.justin.envelopebudget.HomeFragment" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:layout="@layout/fragment_home" /> 

    </LinearLayout> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_gravity="end|bottom" 
     android:layout_margin="@dimen/fab_margin" 
     app:backgroundTint="@color/accent" 
     android:src="@drawable/ic_add_white_24dp" /> 

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

<android.support.design.widget.NavigationView 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:headerLayout="@layout/drawer_header" 
    app:menu="@menu/drawer" /> 

</android.support.v4.widget.DrawerLayout> 

Der Aktivitätscode:

public class Home extends ActionBarActivity { 

    private Toolbar mToolbar; 
    private DrawerLayout mDrawerLayout; 
    private Context mContext = this; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

     setUpToolbar(); 
     setUpNavDrawer(); 

     findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startActivity(new Intent(mContext, NewTransactionActivity.class)); 
      } 
     }); 
    } 

    private void setUpToolbar() { 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     if (mToolbar != null) { 
      setSupportActionBar(mToolbar); 
     } 
    } 

    private void setUpNavDrawer() { 
     if (mToolbar != null) { 
      mDrawerLayout = (DrawerLayout)  findViewById(R.id.drawer_layout); 

      getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
      mToolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp); 
      mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        mDrawerLayout.openDrawer(GravityCompat.START); 
       } 
      }); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_home, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Und v21/Stile:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="AppTheme" parent="AppTheme.Base"> 
     <item name="android:colorPrimary">@color/primary</item> 
     <item name="android:colorPrimaryDark">@color/primary_dark</item> 
     <item name="android:colorAccent">@color/accent</item> 
     <item name="android:textColorPrimary">@color/primary_text</item> 
     <item name="android:textColorSecondary">@color/secondary_text</item> 

     <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
     <item name="android:statusBarColor">@android:color/transparent</item> 

    </style> 
</resources> 

ich nach Chris Banes modelliert s CheeseSquare App auf github, aber ich bekomme nicht das Verhalten, das ich will.

Ich habe versucht, die windowDrawsSystemBarBackgrounds und statusBarColor von v21/styles entfernen, und ich bekomme die richtige Farbe, aber die Statusleiste geht nie transparent:

enter image description here

Hilfe würde geschätzt. Das sind neue Sachen, also weiß ich, dass wir alle lernen.

Danke fürs Lesen!

-Justin

Antwort

23

mit diesem für mehr Stunden Nach dem Kampf, und meinen Code reichlicher den cheesesquare App Vergleich, fand ich folgende: Die DrawerLayout das android:fitsSystemWindows="true" und die NavigationView auch Attribut haben muss, aber die CoordinatorLayout nicht sollte. Sobald ich diese Änderungen vorgenommen habe, hat es funktioniert.

Vielen Dank und hoffentlich ist das hilfreich für jemanden!

Sie können meinen Code für das Layout here ansehen.

-Justin

+1

yesss !!!! Danke Danke. Ich habe das stundenlang gesucht. Die Dokumentation für die Support- und Support-Design-Bibliotheken ist so schwer zu finden. Ich finde eine Menge Android-Zeug ist schlecht dokumentiert. – Phil

0

Set dies zu Ihrem navigationViewandroid:fitsSystemWindows="true" dies stellt sicher, dass die Navigation hinter dem statusbar sein wird, und fügen Sie colorAccent zu Ihrem Stil in Werte Ordner.

0

In Ihrem Stil Datei AppCompact Thema als Eltern zu verwenden versuchen ...

<style name="AppTheme" parent="Base.Theme.AppCompat"> 

Ich hoffe, dass es Ihnen hilft ..

1

Sie sollten überprüfen, neuere SDK-Beispiele.

tatsächlich verwenden sie Coordinatorlayout in activity, dass Sie unter statusbar zeichnen wollen und haben anderes Thema für das Layout, denn wenn Sie setzen transparent statusbar für andere Aktivitäten, bei denen Sie root-Layout nicht Coordinatorlayout haben wird es zeigen, weiß ungefärbt statusbar.

+0

Es hat funktioniert. Danke – diordna

+0

Diese Antwort ist veraltet, ich schlage vor, Sie neuere Schublade Beispiel zu sehen. Laden Sie neue SDK-Beispiele herunter und sehen Sie, wie es funktioniert. Persönlich mag ich ihre Lösung auch nicht, weil es wie ein Hack aussieht, aber es ist viel besser als meine aktuelle Antwort. –

+0

Danke für den Vorschlag. Ich werde das überprüfen. – diordna

10

Setzen Sie dies auf Ihre NavigationView android:fitsSystemWindows="false"

+0

danke Kumpel, funktioniert gut! –

+0

Ich habe auf Nougat getestet, es läuft gut für 2 Fälle: android: fitsSystemWindows = "true/false". aber auf Kitkat sollte es android: passenSystemWindows = "false" für NavigationView, um die Statusleiste zu überlappen – HungNM2

Verwandte Themen