Me gustaría definir atributos personalizados en el fragmento de Android utilizando XML (sin usar paquetes de parámetros adicionales) como declare-styleable
en controles personalizados. Pero no hay constructores con parámetros AttrSet, entonces ¿es posible? ¿Puedo anular public void onInflate(android.app.Activity activity, android.util.AttributeSet attrs, android.os.Bundle savedInstanceState)
para obtener soporte de atributos?Atributos personalizados en los fragmentos de Android
Respuesta
@Override
public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
super.onInflate(activity, attrs, savedInstanceState);
// Your code here to process the attributes
}
Funciona, pero asegúrese de borrar los marcadores de Lint (herramientas Android> Clear Lint Markers). ¡Pasé 10 minutos tratando de descubrir por qué no estaba creciendo! – tdevaux
Gracias tdevaux, solo pasé 5 minutos antes de volver a leer esto. ¡Tengo 5 minutos más disponibles en mi vida! – dhaag23
El enlace para Support4Demos se cambia o se puede cambiar, por lo que se publica la solución completa. Aquí va.
Crear attrs.xml archivo en res/valores carpeta. O agregue el contenido a continuación si el archivo ya existe.
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyFragment"> <attr name="my_string" format="string"/> <attr name="my_integer" format="integer"/> </declare-styleable>
Sustituir el delegado onInflate del fragmento y leer atributos en que
/** * Parse attributes during inflation from a view hierarchy into the * arguments we handle. */ @Override public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { super.onInflate(activity, attrs, savedInstanceState); Log.v(TAG,"onInflate called"); TypedArray a = activity.obtainStyledAttributes(attrs,R.styleable.MyFragment); CharSequence myString = a.getText(R.styleable.MyFragment_my_string); if(myString != null) { Log.v(TAG, "My String Received : " + myString.toString()); } int myInteger = a.getInt(R.styleable.AdFragment_my_integer, -1); if(myInteger != -1) { Log.v(TAG,"My Integer Received :" + myInteger); } a.recycle(); }
pasar estos atributos en el archivo de diseño de la siguiente manera. Sólo un ejemplo
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is android activity" /> <fragment android:id="@+id/ad_fragment" android:name="com.yourapp.packagename.MyFragment" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" app:my_string="Hello This is HardCoded String. Don't use me" app:my_integer="30" /> </RelativeLayout>
Eso es todo. Es una solución de trabajo.
Al hacer esto, si ve algún error de espacio de nombres en xml. intente limpiar el proyecto una y otra vez. Esto es patético pero el eclipse y adt se comporta mal a veces.
espero que ayude a otros :)
Saludos
Mi estudio Android siguió mostrando los atributos personalizados en XML con subrayado rojo que indica que hay un error, pero todo el proyecto fue perfecto. FYI para alguien que pueda pensar que no lo está haciendo bien mirando esos errores en su archivo de diseño. – Pocha
puede usar 'http: // schemas.android.com/apk/res-auto' en lugar de xmlns: app =" http://schemas.android.com/apk/res/com.yourapp.packagename "en auto -sustituto del nombre del paquete. http://stackoverflow.com/questions/10448006/xml-namespace-declaration-auto-substitute-package-name –
OK, me he perdido el anterior. Si tú, como yo, copiamos esto pegado de un par de lugares, presta atención y asegúrate de que los espacios de nombres coincidan, p. ** xmlns: $ {NameSpace} ** y lo mismo en el atributo ** $ {NameSpace} **: attribute = "..." – TacB0sS
- 1. Atributos personalizados en Android
- 2. Pasar atributos personalizados a un sombreador de fragmentos personalizado
- 3. Están los atributos personalizados OK en XHTML
- 4. Atributos personalizados en ActionResult
- 5. fragmentos de código personalizados en intellisense
- 6. ¿Cómo agregar documentación a los atributos personalizados?
- 7. Atributos personalizados HTML5 - ¿Por qué los usaría?
- 8. selector de color Android no funciona con atributos personalizados
- 9. ¿Son los atributos personalizados para los Enum peligrosos?
- 10. Atributos personalizados en miembros de clase
- 11. Herencia de atributos personalizados en propiedades abstractas
- 12. ¿Cómo configuro los atributos HTML personalizados en formularios django?
- 13. Fragmentos dinámicos en Android
- 14. Atributos HTML personalizados y jQuery
- 15. ¿Agregar atributos personalizados usando mono.cecil?
- 16. Creación de estilo predeterminado con atributos personalizados
- 17. ¿Cómo agrego fragmentos personalizados a zen-coding?
- 18. ¿Cuáles son los riesgos concretos de usar atributos HTML personalizados?
- 19. Atributos y excepciones personalizados en .net
- 20. Clase Atributos personalizados en Metro Style App
- 21. ¿Cómo puedo obtener atributos personalizados?
- 22. Incluir diseño con atributos personalizados
- 23. Atributos personalizados en un esquema xsd
- 24. Obtener atributos personalizados de valor enum
- 25. PostSharp: Los atributos personalizados se eliminan cuando se utiliza OnMethodInvocationAspect
- 26. ¿Recuperar valores de parámetros de atributos personalizados?
- 27. C# Atributos personalizados de las Propiedades
- 28. Nette Framework - macros de atributos personalizados
- 29. ¿Es posible tener atributos personalizados en las etiquetas AndroidManifest.xml?
- 30. Atributos personalizados del tipo de matriz
producen errores durante la compilación: '... \ app \ res \ layout \ select_category.xml: 26: Error: No se encontró identificador de recursos para el atributo 'showRadioButtons 'en paquete' com.companyX.projectY ' ... \ app \ res \ layout \ select_category.xml: 26: error: no se ha encontrado ningún identificador de recurso para el atributo' highlightSelection 'en el paquete' com.companyX.projectY ' .. . \ app \ res \ layout \ select_category.xml: 26: error: no se ha encontrado ningún identificador de recurso para el atributo 'unselectedColor' en el paquete 'com.companyX.projectY'' – Anton
aplicación espacio de nombres xml y declare-stylable se escriben corr ectly. puede proporcionarlos, si es necesario – Anton