2017-08-30 2 views
0

-Code der Ansicht, ich bin mit in:state_pressed arbeiten nicht in Farbauswahl für Tönung für einen Imageview

<ImageView 
      android:layout_width="20dp" 
      android:layout_height="25dp" 
      android:background="@drawable/ic_bookmark_border_black_24dp" 
      android:layout_below="@+id/author" 
      android:layout_alignRight="@+id/dots" 
      android:tint="@color/bookmark_color_selector" 
      android:id="@+id/bookmark"/> 

Der Code der Farbauswahl:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:color="@android:color/black" android:state_pressed="true"/> 
<item android:color="@android:color/white"/> 
</selector> 

Weitere Informationen: I verwende diese Ansicht in einer cardView, die dann in einer recyclerView verwendet wird. Die Farbe des Symbols bleibt weiß. Ändert sich nicht (wie ich es will) zu schwarz beim Berühren.

+0

Funktioniert es, wenn Sie diese Auswahl in '' 'android: background'' setzen? – wzieba

+0

Ich habe das Android-Hintergrund-Attribut für das Symbol verwendet. – Chirag

+0

Ok, ich verstehe, aber versuchen wir es und sehen, ob sich dann der Hintergrund ändert – wzieba

Antwort

0

diese Zeilen hinzufügen als auch in der Wahl

android:background="@color/white" 
android:state_focused="true" 
+0

Ich habe das Android-Hintergrund-Attribut für das Symbol verwendet. – Chirag

+0

Funktioniert es? –

0

Sie werden eine Reihe von Änderungen vornehmen müssen. Entfernen Sie zunächst diese beiden Zeilen von Ihrem <ImageView> tag:

 android:background="@drawable/ic_bookmark_border_black_24dp" 
     android:tint="@color/bookmark_color_selector" 

Und fügen Sie diese Zeile:

 android:clickable="true" 

Dann in Ihrem Java-Code, wo immer Sie diese ImageView aufblasen (wahrscheinlich in onCreate() Methode ist Ihre Aktivität) , diesen Code hinzufügen:

ImageView bookmark = (ImageView) findViewById(R.id.bookmark); 
    Drawable icon = ContextCompat.getDrawable(this, R.drawable. ic_bookmark_border_black_24dp); 
    ColorStateList tint = ContextCompat.getColorStateList(this, R.color.bookmark_color_selector); 
    DrawableCompat.setTintList(icon, tint); 
    bookmark.setImageDrawable(icon); 

Was ist hier los?

Grundsätzlich unterstützen ImageView s keine Tönung basierend auf einem Selektor vor API 21, daher müssen Sie die support library-Methoden verwenden, damit es funktioniert. Mit den Methoden ContextCompat können Sie auf Ihr Bild und Ihren Farbselektor zugreifen, und dann wendet die Methode DrawableCompat den Farbton tatsächlich auf das Bild an. Schließlich müssen Sie Ihre ImageView "klickbar" machen oder sonst wird es nie in den gedrückten Zustand sein.

bearbeiten Ich habe gerade bemerkt, dass Sie sagten, Sie dies ein RecyclerView innen verwendet haben. Also muss mein Java-Code oben entweder in onCreateViewHolder() oder onBindViewHolder() sein. Als solches ist this kein gültiger Verweis auf eine Context Instanz für die ContextCompat Methoden; Verwenden Sie stattdessen itemView.getContext().

Verwandte Themen