2015-01-27 10 views
7

Używam paska narzędzi z AppCompat V7, aby zastąpić poprzedni pasek akcji i chcieć mieć cień paska narzędzi jak poprzedni pasek akcji. ale pasek narzędzi nie ma domyślnie cienia, a ja próbowałem poprawek wymienionych z reddit. ale bez szczęścia.Projektowanie materiałów - pasek narzędzi AppCompat bez pokazywania cienia

kod, aby ustawić cień:

mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

Układ Pasek:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minHeight="?attr/actionBarSize" 
    android:background="#F1F1F1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="0dp" 
    android:layout_margin="0dp" 
    foreground="?android:windowContentOverlay"> 

układ działalność:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"  
    tools:context=".MainActivity" 
    android:layout_width="match_parent" 
    android:id="@+id/drawer_layout" 
    android:layout_height="match_parent"> 

    <!-- activity view --> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <include 
      android:id="@+id/toolbar" 
      layout="@layout/toolbar" /> 
     <FrameLayout android:id="@+id/fragment_container" 
      android:layout_below="@id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      /> 

    </RelativeLayout> 

    <!-- navigation drawer --> 
    <RelativeLayout 
     android:id="@+id/left_drawer" 
     android:layout_gravity="start" 
     android:layout_width="match_parent" 
     android:background="#fff" 
     android:layout_height="match_parent"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingLeft="16dp" 
      android:paddingRight="16dp" 
      android:paddingTop="8dp" 
      android:paddingBottom="8dp" 
      android:divider="#eee" 
      android:background="#EEE" 
      android:id="@+id/drawer_header"> 
      <ImageView 
       android:id="@+id/user_icon" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="top" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentLeft="true" 
       android:contentDescription="@string/user_icon" 
       android:src="@drawable/ic_action_person" 
       android:paddingTop="0dp" 
       android:paddingLeft="0dp"/> 
      <TextView 
        android:id="@+id/userName" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_toRightOf="@+id/user_icon" 
        android:gravity="center" 
        android:layout_gravity="center_vertical" 
        android:layout_centerVertical="true" 
        android:textSize="14sp" 
        android:text="@string/not_logged_in" 
        android:paddingTop="0dp" 
        android:paddingBottom="0dp"/> 
     </RelativeLayout> 
     <ListView 
      android:id="@+id/drawer_list" 
      android:layout_below="@+id/drawer_header" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:divider="#eee" 
      android:background="#fff" 
      android:dividerHeight="0dp" /> 
    </RelativeLayout> 

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

Ustawienie w style.xml:

<style name="myAppTheme" parent="Theme.AppCompat.Light"> 
    <item name="colorPrimary">@color/primaryColor</item> 
    <item name="colorPrimaryDark">@color/primaryColorDark</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
    <item name="android:windowContentOverlay">@drawable/drawer_shadow</item> 
</style> 

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
    <item name="spinBars">true</item> 
    <item name="color">@android:color/black</item> 
</style> 

Czy ktoś może pomóc?

dziękuję!

update 1: z sugestią Willisa otrzymuję wyświetlany cień, ale nie jest on poniżej paska narzędzi, zamiast tego znajduje się po lewej stronie paska narzędzi. enter image description here

Aktualizacja 2: Zauważyłem, że jeśli nie ustawię windowContentOverlay w toolbar.xml i styles.xml, cień jest faktycznie na górze paska narzędzi. enter image description here

+0

Te dwa są całkowicie różne cienie. Pionowy to "DrawerLayout". Powinien być wyświetlany obok rozwiniętej szuflady. Poziomy jest częścią 'windowContentOverlay' na API poniżej' LOLLIPOP'. Podczas pracy z widżetem "Pasek narzędzi" pasek narzędzi nie jest częścią wystroju okna, więc cień zaczyna się w górnej części okna nad paskiem narzędzi, a nie pod nim. Musisz dodać dodatkowe puste 'Widok' pod' Toolbar' pre-'LOLLIPOP' z jego tłem ustawionym na pionowy shadow drawable (8dp tall' # 20000000' to '# 00000000'). Na 'LOLLIPOP' możesz ustawić rzędną 8dp na pasku narzędzi. –

+0

Witaj Eugen, uratowałeś mi dzień. Dokładnie tego potrzebuję i działa świetnie pod pre-Lollipop. to powinien być poprawny anwser. Czy możesz to opublikować jako odpowiedź i mogę to zaakceptować. wielkie dzięki! –

+0

Po prostu to zrobiłem, cieszę się, że mogę służyć. –

Odpowiedz

4

Te dwa to zupełnie różne cienie. Wartość jest równa . Powinien być wyświetlany obok rozwiniętej szuflady. Poziom jest częścią windowContentOverlay na API poniżej LOLLIPOP (na LOLLIPOP jest to @null).

Podczas pracy z Toolbar widget pasek narzędzi nie jest częścią wystroju okien już tak cień zaczyna się na górze okna nad pasek narzędzi zamiast poniżej to (tak chcesz windowContentOverlay być @null). Dodatkowo musisz dodać dodatkowy pusty View pod paskiem narzędzi pre-LOLLIPOP z tłem ustawionym na pionowe pobieranie w tle (gradient 8dp od #20000000 do #00000000 działa najlepiej). Na LOLLIPOP zamiast tego można ustawić rzędną 8dp na pasku narzędzi.

Uwaga: Użyj tego samego gradientu, ale poziomego jako cień szuflady, aby uzyskać najlepsze wyniki.

2

Możesz ustawić ilość cienia za pomocą metody setElevation. Np

getSupportActionBar().setElevation(25); 

Zwiększanie/zmniejszanie wartości przekazanej setElevation w konsekwencji zwiększyć/zmniejszyć występowanie efektu strefy.

+0

dzięki Willis, jest pewne zamieszanie w moim pytaniu, faktycznie muszę pokazać cień, ale nie znalazłem rozwiązania, które sprawi, że będzie działało. czy można ustawić inną wartość elewacji, aby pokazać cień? –

+0

Przepraszam, błędnie przeczytałem pytanie. Edytowałem swoją odpowiedź. – Willis

+0

Witaj Willis, wielkie dzięki! Ustawiam także motyw aplikacji. Mam teraz wyświetlany cień, ale nie jest on pod paskiem narzędzi. jakiekolwiek dalsze sugestie? –

0

Aby wyświetlić cień pod paskiem narzędzi, użyj aplikacji AppBarLayout dostępnej w Bibliotece Wsparcia projektowania Google Android.Oto przykład, w jaki sposób należy go użyć.

<android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
    <android.support.v7.widget.Toolbar 
      android:layout_height="?attr/actionBarSize" 
      android:layout_width="match_parent"/> 
    </android.support.design.widget.AppBarLayout> 

Aby korzystać z Android Projekt Biblioteka Pomoc Google wpisać następujące do pliku build.gradle:

compile 'com.android.support:design:22.2.0'