Sobes.tech
Middle

Comment ajouter des attributs personnalisés pour une vue personnalisée dans Android?

sobes.tech IA

Réponse de l'IA

  1. Définition des attributs dans attrs.xml : Créez le fichier res/values/attrs.xml (ou ajoutez-le à un existant). Il définit <declare-styleable> avec le nom de la vue personnalisée et liste <attr> pour chaque attribut personnalisé, en indiquant leur format (format).

    <?xml version="1.0" encoding="utf-8"?>  
    <resources>  
        <declare-styleable name="MyCustomView">  
            <attr name="customText" format="string"/>  
            <attr name="customColor" format="color"/>  
            <attr name="customEnabled" format="boolean"/>  
        </declare-styleable>  
    </resources>  
    
  2. Utilisation des attributs dans la mise en page XML : Dans la mise en page XML où la vue personnalisée est utilisée, ajoutez des attributs spécifiques en utilisant l'espace de noms app.

    <com.example.MyCustomView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        xmlns:app="http://schemas.android.com/apk/res-auto"  
        app:customText="Bonjour Vue Personnalisée"  
        app:customColor="@color/colorPrimary"  
        app:customEnabled="true"/>  
    
  3. Lecture des attributs dans le code de la vue : Dans le constructeur de la vue personnalisée (habituellement celui qui prend Context et AttributeSet), utilisez les classes TypedArray et obtainStyledAttributes pour lire les valeurs des attributs spécifiés dans XML.

    class MyCustomView @JvmOverloads constructor(  
        context: Context,  
        attrs: AttributeSet? = null,  
        defStyleAttr: Int = 0  
    ) : View(context, attrs, defStyleAttr) {  
    
        // Variables pour stocker les valeurs des attributs  
        private var customText: String? = null  
        private var customColor: Int = 0  
        private var customEnabled: Boolean = false  
    
        init {  
            // Obtention de TypedArray avec les attributs  
            val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0)  
    
            try {  
                // Lecture des valeurs des attributs  
                customText = typedArray.getString(R.styleable.MyCustomView_customText)  
                customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Valeur par défaut  
                customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Valeur par défaut  
    
                // Maintenant, vous pouvez utiliser customText, customColor et customEnabled pour configurer la vue  
                // Par exemple :  
                // if (customEnabled) { /* ... */ }  
    
            } finally {  
                // Important ! Libérer les ressources en appelant recycle()  
                typedArray.recycle()  
            }  
        }  
    
        // ... reste de la logique de la vue ...  
    }  
    

    La méthode obtainStyledAttributes retourne un TypedArray, à partir duquel vous pouvez extraire les valeurs des attributs par leurs indices (générés par la classe R). Après utilisation, il est nécessaire d'appeler recycle() pour libérer les ressources.