2014-10-29 11 views
14

Come sapete, Elevation non funziona su dispositivi Pre-Lollipop. Per questo motivo, la App Bar predefinita in appcompat-v7 utilizza una texture "pseudo-shadow", come mi piace chiamarla, per emulare l'ombra. Il mio problema è che ho bisogno di usare una barra degli strumenti personalizzata. Quando uso la barra degli strumenti personalizzata, quella "pseudo-ombra" non è presente. Quindi sembra solo piatto. Qualche idea su come aggiungere quell'ombra? Alcune persone hanno detto su altri forum di aggiungere un FrameLayout con un primo piano di "android: windowContentOverlay" che in qualche modo si sovrappone alla barra degli strumenti. Non ho trovato alcun modo per farlo funzionare, purtroppo. E per qualche ragione, nei miei test, "android: windowContentOverlay" è comunque invisibile. Non sono sicuro di cosa sto sbagliando. :/Shadow non funziona quando si utilizza una barra degli strumenti (Lollipop appcompat-v7)

Ecco i dati XML layout per la mia barra degli strumenti:

<android.support.v7.widget.Toolbar 
    android:id="@+id/my_awesome_toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

Ecco come si presenta con il default AppCompat AppBar: http://imgur.com/0EiE1Vv

Ecco come si presenta con una barra degli strumenti personalizzata: http://imgur.com/GGEC6Tq

Modifica: con l'aiuto di alanv, ho scoperto come creare un'ombra sotto la barra degli strumenti. Tuttavia, non è lo stesso che viene fornito in modo predefinito in AppCompat. È solo una leggera ombra e, se ricordo bene, è la stessa risorsa ombra che era stata usata nelle versioni precedenti. Sto attraversando un periodo molto difficile nel tentativo di trovare la risorsa per la barra AppCompat predefinita.

+1

Il primo piano deve essere impostato utilizzando Android: primo piano = "android:? Attr/windowContentOverlay".Il FrameLayout dovrebbe trovarsi sotto la tua barra degli strumenti e dovrebbe contenere il contenuto dell'app. – alanv

+1

Grazie per il suggerimento. In realtà * ha * creato un'ombra, sebbene sia piuttosto debole. Non proprio quello che sto cercando, purtroppo. Forse c'è un'altra risorsa rispetto a windowContentOverlay che fa questo? Non riesco a trovare nulla. – Michael

+0

@Phascinate hai trovato risorse adeguate sia per gli overlay, sia per la barra degli strumenti e il contenuto di seguito? Sembra che queste siano due sovrapposizioni diverse e sto cercando risorse per ottenere risultati simili alla barra degli strumenti di magazzino. – tomrozb

risposta

0

Vorrei solo avere un'ombra XML personalizzato, con una ImageView

<ImageView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/shadow" 
android:layout_height="@dimen/shadow_height" 
android:layout_width="match_parent" 
android:src="@drawable/shadow_shape" 
    /> 

e la sua shadow_shape.xml risorsa immagine nella cartella drawable:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<gradient android:startColor="@color/shadow" 
    android:endColor="@color/transparent" 
    android:angle="-90" /> 
</shape> 

È possibile ottenere abbastanza piacevoli i risultati per modulazione @dimen/shadow_height e @color/shadow in base alle proprie esigenze (il più scuro @color/shadow & più alta è la vista, maggiore è la quota falsa). Non è nativo, ma molto personalizzabile.

1

Lo metterai sotto la barra degli strumenti.

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="5dp" 
     android:background="@drawable/toolbar_shadow" /> 
</FrameLayout> 

@ drawable/toolbar_shadow:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
<gradient 
    android:startColor="@android:color/transparent" 
    android:endColor="#88333333" 
    android:angle="90"/> 
</shape> 
1

ti consiglierei di utilizzare due differenti layout (uno per la versione 21 e una per tutti gli altri) e includere nel vostro layout utilizzando:

<include layout="@layout/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Esempio: https://gist.github.com/P0T4T0x/fbd2151bb40d3bd635d0

1

Per mostrare ombra sotto il vostro toolb Per favore usa AppBarLayout disponibile nella Libreria di supporto alla progettazione di Google Android. Ecco un esempio di come dovrebbe essere usato.

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

Per utilizzare Google Android Supporto alla progettazione Biblioteca entrare in seguito nel file build.gradle:

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