Variables en los recursos XML: pasa valores de padres a hijos

Estoy tratando de reutilizar formas primitivas y componer gran parte de mi interfaz de usuario utilizando estos elementos XML declarativos.

Cómo hacer un atributo variable de Android?

Pero no quiero crear un archivo XML separado para cada valor de atributo, y sus permutaciones, y en el proceso duplicar gran parte del trabajo.

Por ejemplo, me gustaría que el consumidor de esta forma ser capaz de definir el androide: valor de radio?

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#449def" android:endColor="#2f6699" android:angle="270"/> <stroke android:width="1dp" android:color="#2f6699"/> <corners android:radius="3dp"/> </shape> 

¿Establecer atributo de consumir XML padre?

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/shape_box_round_blue_uniform" /> <!-- How to set the corner radius here? --> <item android:drawable="@drawable/shape_box_round_blue" /> </selector> 

Soluciones?

  • Si es posible, no quisiera usar ningún código Java detrás / evitar la necesidad de crear controles / clases personalizados
  • El uso de recursos de dimensión puede ser una avenida fructífera?

Puedes crear

Atributos de estilo

, Que creo que es lo que está buscando. Básicamente son atributos variables. Por ejemplo, puedes usar esto en tus themes.xml

 <?xml version="1.0" encoding="utf-8"?> <resources> <!-- You can define attributes here --> <attr name="button_radius" format="reference" /> </resources> 

Que define una variable de referencia llamada: button_radius Esto se puede utilizar en Estilos, o en los archivos de diseño xml:

 <!-- You can use them like so: --> <style name="MyApp.Theme1" parent="android:Theme.Holo.Light"> <item name="button_radius">12</item> </style> <style name="MyApp.Theme2" parent="android:Theme.Holo.Light"> <item name="button_radius">36</item> </style> 

De esta manera, al cambiar el tema, puede utilizar los diferentes valores para su radio. A continuación se muestra un ejemplo no probado de cómo cambiaría su forma dibujable:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:startColor="#449def" android:endColor="#2f6699" android:angle="270"/> <stroke android:width="1dp" android:color="#2f6699"/> <corners android:radius="?button_radius"/> <!-- NOTE the ?button_radius--> </shape> 

Los usuarios pueden simplemente aplicar un estilo diferente para usar diferentes atributos. No sé si este ejemplo responde a su pregunta completa, pero hay mucho que puede hacer declarando atributos en sus temas. Estos atributos son referencias dinámicas. Para más información sobre las posibilidades, consulte este artículo

  • Las clases siguientes no pudieron ser instanciadas: - android.support.v7.widget.Toolbar
  • Utilice el cuadro combinado Tema encima del diseño para elegir un diseño diferente o corrija las referencias de estilos del tema
  • ¿Cómo puedo obtener nodos específicos de XML usando XPath en Java?
  • ¿Por qué el estilo y el diseño no usan el espacio de nombres de Android?
  • Cadena de resultados de Android HttpUrlConnection truncada
  • app falla cuando cambio el orden de mi XML RelativeLayout android
  • Eclipse android phonegap config.xml no funciona?
  • Diseño del centro Android
  • ¿Cómo editar el valor de un nodo de un archivo XML existente de una tarjeta SD y guardarlo de nuevo?
  • Cómo aumentar el tamaño de transport.dump de 256 bytes a 512 o más bytes en KSOAP2?
  • Cómo ver los archivos xml extraídos en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.