Los atributos personalizados de monodroid / xamarin están vacíos usando ObtainStyledAttributes

Tratando de pasar un atributo personalizado de un diseño padre a un diseño secundario.

El TypedArray devuelto de ObtainStyledAttributes () no parece tener los valores personalizados correspondientes para las propiedades personalizadas que he creado, aunque puedo asignar sus ID a los valores en Resource.designer.


Attr.xml:

<resources> <declare-styleable name="HeaderView"> <attr name="bgcolor" format="color" /> <attr name="testing" format="string" /> </declare-styleable> 

Main.xaml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <views.HeaderView android:id="@+id/hdrWatchList" android:layout_width="fill_parent" android:layout_height="20.0dp" custom:bgcolor="@color/blue" custom:testing="testing text buddy" /> 

Ver Clase:

  public HeaderView (Context context, IAttributeSet attrs) : base (context, attrs) { int[] styleAttrs = Resource.Styleable.HeaderView; TypedArray a = context.ObtainStyledAttributes(attrs, styleAttrs); string sid = a.GetString(Resource.Styleable.HeaderView_testing); int id = a.GetColor(Resource.Styleable.HeaderView_bgcolor, 555); Log.Info( "testing", "resource sid : " + sid); // RETURNS '' Log.Info( "testing", "resource id : " + id); // RETURNS DEF 555 

Creo que el problema reside en cómo especificó su xmlns:custom espacio de nombres xmlns:custom . Necesitas agregar tu espacio de nombres de aplicaciones al final de la cadena que ya tienes así:

 xmlns:custom="http://schemas.android.com/apk/res/my.awesome.namespace" 

También necesitas tener un AndroidManifest.xml definido para tu proyecto de Android, donde has definido el mismo espacio de nombres.

También las líneas:

 int[] styleAttrs = Resource.Styleable.HeaderView; TypedArray a = context.ObtainStyledAttributes(attrs, styleAttrs); 

Mira un poco extraño para mí y me gustaría escribir:

 var a = context.ObtainStyledAttributes(attrs, Resource.Styleable.HeaderView); 

Especialmente si no está usando styleAttrs más adelante.

EDIT: desde Android SDK rev 17 es posible utilizar:

 xmlns:custom="http://schemas.android.com/apk/res-auto" 

En lugar de tener que escribir todo el espacio de nombres.

  • Símbolo no encontrado en OnActionExpandListener
  • Diálogo de búsqueda en Mono Android
  • Xamarin android support library v7 y v13 en la misma aplicación
  • Android: TargetFrameworkVersion es mayor que mi proyecto
  • MonoDroid: Error al llamar al constructor de la vista personalizada - TwoDScrollView
  • HttpClient - Xamarin Android - MvvmCross
  • Mono para Android - ¿Cómo funciona?
  • Recepción de SMS con MonoDroid
  • Añadir Google Maps API v2 en Mono para Android
  • F # en Mono para Android
  • Java.IO.ISerializable Xamarin
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.