Custom attr get devuelve valores inválidos

Tengo una vista de encargo en la cual quiero fijar el color de un textview.

yo tengo

Attrs.xml

<declare-styleable name="PropertyView"> <attr name="propertyTitle" format="string" localization="suggested" /> <attr name="showTitle" format="boolean" /> <attr name="propertyTextColor" format="color" /> <attr name="propertyTextSize" format="dimension" /> </declare-styleable> 

Lo establecí en el archivo de diseño

 <com.something.views.PropertyView android:id="@+id/dwf_rAwayTeamTimePenaltyInput" style="@style/mw" propertyview:propertyTextSize="16sp" propertyview:propertyTitle="@string/AwayTeam" propertyview:showTitle="true" propertyview:propertyTextColor="@color/textLight" /> 

Y en mi código lo configuro

  TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PropertyView, 0, 0); showTitle = a.getBoolean(R.styleable.PropertyView_showTitle, false); String title = a.getString(R.styleable.PropertyView_propertyTitle); float textSize = a.getDimension(R.styleable.PropertyView_propertyTextSize, -1); int color = a.getColor(R.styleable.PropertyView_propertyTextColor, -1); textSize = textSize / getResources().getDisplayMetrics().scaledDensity; if(BuildConfig.DEBUG) Log.e(getClass().getName(), "Color set to: " + color); setShowTitle(showTitle); setTitle(title); if(textSize >= 0) mTitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize); if(color != -1) mTitleTextView.setTextColor(color); a.recycle(); 

Pero el color sigue regresando -1. También traté de establecer el color a # 000 Cuando lo hago obtendré un valor de -16777216

También intenté a.getInteger y a.getInt

¿Alguna experiencia con este problema o sugerencias?

Solución, gracias a Alex Fu

GetColor no puede manejar referencias

Ahora está trabajando con

 ColorStateList color = a.getColorStateList(R.styleable.PropertyView_propertyTextColor); mTitleTextView.setTextColor(color); 

Está utilizando una referencia a un color en su ejemplo, sin embargo, de acuerdo con su archivo attrs.xml, esa propiedad debe ser de un tipo de color, no una referencia. Esta es probablemente la razón por la que cuando se utiliza un código de color hexadecimal funcionó, pero con una referencia devuelto -1.

Si cambia el formato a una referencia, también debe cambiar el método para recuperarlo de a.getColor() a a.getColorStateList() .

El es un tipo de error con attrs .

Lo siguiente funciona perfectamente.


attrs.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- Your View --> <declare-styleable name="YourView"> <attr name="tint_color" format="reference" /> <!-- Important --> <attr name="ripple_drawable" format="reference" /> <!-- Important --> </declare-styleable> </resources> 

YourView.java

 public YourView(Context context) { this(context, null); } public YourView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public YourView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // Get attrs TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.YourView, defStyleAttr, 0); // Set tint int tintStyle = R.styleable.YourView_tint_color; if (a.hasValue(tintStyle)) { mTintColor = a.getResourceId(tintStyle, 0); // Important setTint(mTintColor); } // Set Ripple int rippleStyle = R.styleable.YourView_ripple_drawable; if (a.hasValue(rippleStyle)) { mRippleDrawable = a.getResourceId(rippleStyle, 0); // Important setRipple(mRippleDrawable); } // End a.recycle(); } 

Uso

 <com.your.app.YourView ... app:ripple_drawable="@drawable/ripple_default" app:tint_color="@color/colorWhite" /> 
  • Restaurar estado de vista antes de aplicar atributos XML
  • ¿En cascada el valor de un atributo personalizado de una vista principal a una vista secundaria?
  • El constructor de vista personalizada no se llama a android 5.0.2
  • Android - Canvas.clipRect () - Eliminar el clip existente
  • ¿Cómo se utiliza el parámetro defStyleAttrs en obtenidoStyledAttributes?
  • No se encontró ningún recurso que coincida con el nombre dado '@ style / Widget.RatingBar.Small'
  • Soporte para diferentes resoluciones android
  • Editado: Android Dibuja la imagen de la aguja en este círculo similar al medidor
  • Vista personalizada que no da margen
  • Soltar sombra para un ViewPager
  • Barra de herramientas extendida con vista personalizada que no se muestra con ancho completo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.