2015-07-08 11 views
14

Ist es möglich, die Farbe des Schattens um den CardView zu ändern? Hauptsächlich verwendet, um markierte die Karte zu markieren, wie es auf beleuchtet wurde?Android CardView mit einer benutzerdefinierten Schattenfarbe

Sollte für L- und Pre-L-Geräte gelten.

+0

Noch finde ich die Lösung dafür. Bitte lassen Sie mich wissen, wenn Sie haben. –

+0

@Maulikpatel Ich glaube, ich habe ein Projekt auf Github gefunden, aber ich erinnere mich nicht an den Namen. Was hast du gefunden? – Davidea

+0

Es sollte dies sein: https://github.com/ZieIony/Carbon: In der Beschreibung steht "CardView mit echten Schatten und abgerundeten Ecken" aber ich habe es nicht ausprobiert. – Davidea

Antwort

8

CardView Schattenfarben sind in den Ressourcen der CardView Bibliothek definiert. Sie können sie überschreiben, indem Sie den Ressourcenwert in Ihrem eigenen Projekt neu definieren, aber Sie können sie nicht dynamisch durch Code ändern.

Bearbeiten: das Überschreiben des Ressourcenwerts betrifft nur Pre-Lollipop-Geräte. Auf Lollipop und höher verwendet CardView immer die native Schattenimplementierung, deren Farbe nicht geändert werden kann.

+0

Überschreiben ist mehr als genug, aber Sie wollen diese Werte überschreiben? - 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 - In meinem color.xml habe ich meine Gewohnheit ' # 37000000' und ' # 03000000' - Ist das System sie nehmen ** automatisch ** ? – Davidea

+0

Ja, diese Werte gelten für alle Ihre CardViews. Ich glaube, dass Sie useCompatPadding auch auf true setzen müssen, um die Farbe auch in neueren Android-Versionen sehen zu können. – BladeCoder

+0

Ich habe es jetzt versucht, aber es funktioniert nicht. Die Ressource kommt von 'android.support.v7.cardview.R.color.cardview_shadow_start_color', wie es mir von meiner color.xml nehmen soll? Können Sie ein Beispiel geben? – Davidea

1

Aktualisieren: Überprüfen Sie my modification.


Hier ist eine Abhilfe:

Kopieren the source code von CardView. Erstellen Sie dann Ihr eigenes Android-Bibliotheksmodul und verwenden Sie dieses Modul anstelle der Unterstützungsbibliothek. Nach diesem oder Kommentar Code in CardView entfernen wie unter:

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(); 
    } 

Das heißt, Sie compat-Version verwenden CardViewApi17Impl auch wenn api 21 oder höher ist. Dann können Sie eigene cardview_shadow_start_color und cardview_shadow_end_color definieren, um diese in Klasse RoundRectDrawableWithShadow zu überschreiben. Darüber hinaus können Sie das anpassbarer machen.

Hoffnung kann jemandem helfen.