2017-01-26 2 views
0

J'ai une barre de progression personnalisée utilisée autour de l'application qui a un attribut pour définir la couleur indéterminée. Depuis que j'utilise la bibliothèque de support j'essaye d'avoir la barre de progression colorée sur les versions plus anciennes d'androïde aussi.Attribut de vue personnalisée Android partagé entre les instances?

En attrs J'ai quelque chose comme:

<declare-styleable name="TestView"> 
     <attr name="testColor" format="color"/> 
</declare-styleable> 

Lors de la déclaration de la vue:

<com.TestView 
    .... 
    app:testColor="#color" 
/> 

Alors mon avis personnalisé est comme ceci:

public class TestView extends ProgressBar { 

    public TestView(Context context) { 
     super(context); 
     applyTint(Color.WHITE); 
    } 

    public TestView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TestView, 0, 0); 

     try { 
      applyTint(attributes.getColor(R.styleable.TestView_testColor, Color.WHITE)); 
     } finally { 
      attributes.recycle(); 
     } 

    } 

    public TestView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, android.support.design.R.style.Base_Widget_AppCompat_ProgressBar); 
     TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TestView, 0, 0); 

     try { 
      applyTint(attributes.getColor(R.styleable.TestView_testColor, Color.WHITE)); 
     } finally { 
      attributes.recycle(); 
     } 
    } 

    private void applyTint(int color) { 
     if (Build.VERSION.SDK_INT >= 21) { 
      setIndeterminateTintList(ColorStateList.valueOf(color)); 
     } else { 
      getIndeterminateDrawable().setColorFilter(color, PorterDuff.Mode.SRC_IN); 
     } 
    } 
} 

Le problème que j'ai est qu'il semble que l'attribut de couleur soit en quelque sorte partagé entre les instances de TestView. Comment puis-je avoir chaque vue pour conserver sa propre valeur d'attribut?

modifier plus tard: semble bien fonctionner sur Android 6, mais échoue sur 4.4.2

+0

ce problème est-il présent sur tous les SDK? –

+0

Semble être lié sur les versions antérieures à Android 5.0. En ce moment, il arrive sur mon appareil de test 4.4.2 – Alin

Répondre

0

Vous avez la réponse à https://stackoverflow.com/a/37434219/379865

Fondamentalement, je devais mettre à jour appliquer mon code avec la teinte:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    DrawableCompat.setTint(DrawableCompat.wrap(getIndeterminateDrawable()), color); 
else { 
    DrawableCompat.wrap(getIndeterminateDrawable()).mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); 
}