2015-07-08 8 views
14

È possibile modificare il colore dell'ombra attorno al CardView? Utilizzato principalmente per contrassegnare la carta selezionata come fosse accesa su?CardView Android con un colore ombra personalizzato

Deve essere valido sui dispositivi L e pre-L.

+0

Ancora sto trovando la soluzione per questo. Fammi sapere se ce l'hai. –

+0

@ Maulikpatel Penso di aver trovato un progetto su Github ma non ricordo il nome. Che cosa hai trovato? – Davidea

+0

Dovrebbe essere questo: https://github.com/ZieIony/Carbon: nella descrizione si dice "CardView con ombre reali e angoli arrotondati" ma non l'ho provato. – Davidea

risposta

8

CardView I colori dell'ombra sono definiti nelle risorse della libreria CardView. Puoi ridefinirli ridefinendo il valore della risorsa nel tuo progetto ma non puoi cambiarli dinamicamente in base al codice.

Modifica: l'override del valore della risorsa interessa solo i dispositivi pre-Lollipop. Su Lollipop e versioni successive, CardView utilizza sempre l'implementazione shadow nativa il cui colore non può essere modificato.

+0

Cambiare per override è più che sufficiente, ma vuoi sovrascrivere questi valori? - http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.0_r1/frameworks/support/v7/cardview/res/values/colors.xml?av = f - Nel mio color.xml ho inserito la mia personalizzazione ' # 37000000' e ' # 03000000' - Il sistema li prende ** automaticamente ** ? – Davidea

+0

Sì, sono questi valori, si applicheranno a tutti i tuoi CardViews. Credo che sia necessario impostare useCompatPadding su true per poter vedere il colore anche nelle versioni Android più recenti. – BladeCoder

+0

Ho provato ora ma non funziona. La risorsa proviene da 'android.support.v7.cardview.R.color.cardview_shadow_start_color' come dovrebbe prendere il mio dal mio color.xml? Potresti fornire un esempio? – Davidea

1

Aggiornamento: Verificare my modification.


Ecco una soluzione:

Copia the source code di CardView. Quindi crea il tuo modulo di libreria Android e utilizza questo modulo anziché la libreria di supporto. Dopo questi, commento o rimuovere il codice in CardView come qui di seguito:

static { 
//  if (Build.VERSION.SDK_INT >= 21) { 
//   IMPL = new CardViewApi21Impl(); 
//  } else 
      if (Build.VERSION.SDK_INT >= 17) { 
      IMPL = new CardViewApi17Impl(); 
     } else { 
      IMPL = new CardViewBaseImpl(); 
     } 
     IMPL.initStatic(); 
    } 

Cioè, si userà compat-versione CardViewApi17Impl anche quando api è di 21 o superiore. Quindi, è possibile definire il proprio cardview_shadow_start_color e cardview_shadow_end_color per sovrascrivere quelli della classe RoundRectDrawableWithShadow. Inoltre, puoi renderlo più personalizzabile.

La speranza può aiutare qualcuno.