2011-08-29 14 views
23

estoy usando un componente de flujo de una visión en mi proyecto, lo que permite que el dev para anular algunos atributos, así:¿Es posible agregar una propiedad personalizada a un estilo en un recurso de Android?

<org.taptwo.android.widget.TitleFlowIndicator 
    ... 
    app:footerTriangleHeight="0dip" 
    ... /> 

estoy Reutilizando este componente en varios diseños, y me gustaría mostrar la propiedades en un estilo. Pero cuando hago esto, el analizador dice Error: No resource found that matches the given name: attr 'app:footerTriangleHeight', incluso si agrego el espacio de nombres en el archivo de estilos.

¿Hay alguna manera de hacerlo en Android?

Gracias.

+0

respuesta seleccionada es incorrecto/incompleto. Puede diseñar elementos de IU personalizados en el archivo de estilos, esto lo hago yo mismo ... Consulte mi respuesta, por ejemplo – Kurru

Respuesta

39

Aplicación Android

Si no está utilizando bibliotecas de Android, entonces aquí es lo que puede hacer:

  1. Definir atributo personalizado styleable (supongo que ya has hecho eso).
  2. No use su prefijo de espacio de nombres en los elementos de estilo (el espacio de nombre se predetermina al espacio de nombres de la aplicación actual).

Ejemplo:

En attrs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="testAttr" format="string"/>   
</resources> 

En styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources>   
    <style name="TestStyle" > 
     <item name="testAttr">asdf</item> 
    </style>   
</resources> 

Biblioteca Android

Si el atributo personalizado proviene de la Biblioteca Android, puede seguir utilizando el enfoque descrito. Teóricamente debería funcionar, porque el espacio de nombres de la Biblioteca Android es el mismo que el de la aplicación (desde la perspectiva de la herramienta aapt durante la compilación). Pero no lo he probado yo mismo.


Si va a especificar el espacio de nombres, se mostrará un error. Hasta donde yo sé, los estilos no admiten espacios de nombres xml. Así que esto se producirá un error:

En styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:app="http://schemas.android.com/apk/res/app.package.name">   
    <style name="TestStyle" > 
     <item name="app:testAttr">asdf</item> 
    </style>   
</resources> 

Analizador automático por omisión es AndroidManifest espacio de nombres de aplicación actual, aunque no se puede especificar de forma explícita este espacio de nombres.

+2

Tiene razón, solo necesitaba eliminar el espacio de nombres en el archivo de estilos, y funcionó.Pero es extraño que se necesite en un archivo de diseño normal, y no en un archivo de recursos. Gracias. –

+0

Esto funciona con el nuevo widget CardView, por ejemplo: simplemente elimine el espacio de nombres, y un elemento de estilo como 16dp se compila y funciona correctamente. – personne3000

6

Se puede definir el estilo en términos de espacio de nombres, que he utilizado yo mismo

es decir

<style name="whatever"> 
    <item name="YourPackage.YourSubPackage:parametername">@drawable_or_anything/bla</item> 
</style> 
+0

Para el texto anterior a: use cualquier espacio de nombre definido en su manifiesto como su "paquete" – Kurru

+1

Esto no funciona para mí. Mi atributo de estilo personalizado es una enumeración. –

+0

¿Intentó cuantificar por completo la enumeración así como el atributo? – Kurru

Cuestiones relacionadas