Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Atributos personalizados en fragmentos de Android

Me gustaría definir atributos personalizados en el fragmento de Android utilizando XML (sin utilizar parámetros adicionales del paquete) como declare-styleable en los controles personalizados. Pero no hay constructores con los parámetros de AttrSet, por lo que es posible? ¿Puedo anular public void onInflate(android.app.Activity activity, android.util.AttributeSet attrs, android.os.Bundle savedInstanceState) para obtener compatibilidad de atributos?

  • ¿Hay una forma de compensar una vista desde el centro en Android?
  • Obtener el relleno predeterminado para AlertDialog
  • Android - Cómo subir fotos de la tarjeta SD a la pared de Facebook
  • Incorporación de ZXing en la aplicación de Android
  • Fragmento sin una vista se bloquea en el cambio de configuración
  • Barra de Acción de Android Botón Arriba versus Sistema Botón Atrás
  • ¿Cómo saber OkHttpClient para ignorar la caché y forzar la actualización desde el servidor?
  • Elegir el nivel de API adecuado para mi aplicación Android
  • Cambiar el color de subtítulos de la barra de acción de Android
  • Escuchar las palabras clave en todo momento, como "Ok google" en 4.4
  • Añadir una imagen de fondo a la forma en XML Android
  • Android: Cómo ocultar un elemento ListView
  • 2 Solutions collect form web for “Atributos personalizados en fragmentos de Android”

    El enlace para Support4Demos se cambia o se puede cambiar para publicar la solución completa. Aquí va.

    1. Cree el archivo attrs.xml en la carpeta res / values. 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> 

    2. Anular el delegado onInflate de fragmento y leer atributos en él

       /** * 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(); } 
    3. Pase estos atributos en su archivo de diseño como sigue. Solo 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. Trate de limpiar el proyecto una y otra vez. Esto es patético, pero eclipse y adt se comportan mal algunas veces.

    Espero que ayude a otros 🙂

    Aclamaciones

     @Override public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { super.onInflate(activity, attrs, savedInstanceState); // Your code here to process the attributes } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.