2015-06-05 12 views
9

Ho creato alcune caselle di controllo e pulsanti di opzione con le visualizzazioni di testo, ma non si sono colorati di pre-lecca-lecca.TextView tinta su AppCompat

miei textviews estendono AppCompatCheckedTextView, sono arredate come:

<style name="CheckBoxStyle" parent="android:Widget.TextView"> 
    <item name="android:textAppearance">?android:attr/textAppearance</item> 
    <item name="android:drawableRight">?android:attr/listChoiceIndicatorMultiple</item> 
    <item name="android:drawableEnd">?android:attr/listChoiceIndicatorMultiple</item> 
    <item name="android:clickable">true</item> 
    <item name="android:background">?attr/selectableItemBackground</item> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:paddingTop">8dp</item> 
    <item name="android:paddingBottom">8dp</item> 
</style> 

e io sono il mio accento definito nel mio tema:

<style name="AppTheme.Platform.NoActionBar" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:selectableItemBackground">@drawable/press_overlay_dark</item> 
    <item name="android:borderlessButtonStyle">@style/BorderlessButton</item> 

    <item name="android:colorAccent">@color/color_accent</item> 
    <item name="colorAccent">@color/color_accent</item> 
</style> 

sto costruendo contro il V21, con un minimo di V16 e utilizzando AppCompat v7-22.1.1. Le mie attività si estendono AppCompatActivity

Genymotion 4.1.1 Nexus 5 5.1.1

+0

Qual è la tua domanda? –

+0

Come faccio a far funzionare la tinta pre-lecca-lecca. AFAIK, dovrebbe tingere con 'EditText' e simili. Aggiunti screenshot per chiarimenti. – DariusL

+0

controllare [questa risposta] (http://stackoverflow.com/a/35867517/2826147) per l'aggiornamento. –

risposta

8

Guardando la fonte per AppCompatCheckedTextView ho finalmente capito. Tonifica solo lo checkMark. Poiché deriva da CheckedTextView, che deriva da TextView, drawableRight viene tinto solo sul lecca-lecca. Guardando la fonte per AppCompatTextView, fornisce solo un backward compatibile textAllCaps. Quindi AFAIK, non esiste un modo incorporato per colorare lo drawableRight e un pre-lecca-lecca simile. Se si desidera una soluzione più personalizzabile, potrebbe essere necessario inserire i propri disegni in un layout.

Lo stile aggiornato:

<style name="CheckBoxStyle" parent="android:Widget.TextView"> 
    <item name="android:textAppearance">@style/TextAppearance.AppCompat</item> 
    <item name="android:checkMark">?android:attr/listChoiceIndicatorSingle</item> 
    <item name="android:clickable">true</item> 
    <item name="android:background">?attr/selectableItemBackground</item> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:paddingTop">8dp</item> 
    <item name="android:paddingBottom">8dp</item> 
</style> 
1

Il widget di tinta nel AppCompat funziona intercettando qualsiasi inflazione layout e l'inserimento di una versione speciale tinta-aware del widget nella sua place.if avete la propria versione personalizzata del widget di, che nel tuo caso è il checkedtextview, la colorazione non funzionerà

Da Sviluppatori Blog sotto widget di colorazione

http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

Quando si esegue su dispositivi con Android 5.0, tutti i widget sono colorati usando gli attributi del tema del colore di cui abbiamo appena parlato. Ci sono due caratteristiche principali che lo permettono su Lollipop: la colorazione disegnabile e gli attributi del tema di riferimento (della forma? Attr/foo) in drawable.

AppCompat fornisce un comportamento simile su versioni precedenti di Android per un sottoinsieme di UI widget:

tutte le operazioni previste dalla barra degli strumenti di AppCompat (modalità di azione, ecc)

EditText

Spinner

CheckBox

RadioButton

Switch (utilizzare il nuovo android.support.v7.widget.SwitchCompat)

CheckedTextView

Non c'è bisogno di fare nulla di speciale per fare questi lavori, basta usare questi controlli nei vostri layout come al solito e AppCompat farà il resto (con alcuni avvertimenti; vedere le domande frequenti di seguito).

+1

Bene, io uso AppCompatCheckedTextView e ancora non tinge. Oppure tingerà solo se lascio che l'attività aumenti la vista? – DariusL

+0

Sì, basta aggiungere la visualizzazione del testo app nel layout XML, invece di creare un layout personalizzato estendendo la visualizzazione del testo appview – 3xplore

+0

che non ha alcun effetto. – DariusL

0

Ho un problema tinta. AppCompatTextView non ha effetto tinta durante l'esecuzione su SDK sotto 21. La mia soluzione sta impostando il colore tinta su java. L'esempio seguente funziona.

xml

<android.support.v7.widget.AppCompatTextView 
    android:layout_width="50dp" 
    android:layout_height="20dp" 
    android:id="@+id/tvInfor2" 
    android:background="@drawable/btn_style_black_border" 
    android:gravity="center" 
    android:backgroundTint="@color/colorPrimary"/> 

java

int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
    if (currentapiVersion <= 21){ 
     tvInfor2.setSupportBackgroundTintList(getResources().getColorStateList(R.color.colorPrimary)); 
    } 
6

Se qualcuno sta ancora cercando la soluzione.

Per livello Api 23> =android:drawableTint="@color/colorPrimary"

Per Api livello livello < Api 23:

private void setTextViewDrawableColor(TextView textView, int color) { 
     for (Drawable drawable : textView.getCompoundDrawables()) { 
      if (drawable != null) { 
       drawable.setColorFilter(new PorterDuffColorFilter(getColor(color), PorterDuff.Mode.SRC_IN)); 
      } 
     } 
    } 
3

Qui è un TextView compatibile all'indietro.

Usage:

<com.github.pedramrn.TextViewCompatTint 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:drawableStart="@drawable/ic_comment_black_14dp" 
    app:drawableTint="@color/colorPrimary" 
    tools:text="28" 
    /> 

gist

Problemi correlati