Comment ajouter des attributs personnalisés pour une vue personnalisée dans Android?
sobes.tech IA
Réponse de l'IA
-
Définition des attributs dans
attrs.xml: Créez le fichierres/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> -
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"/> -
Lecture des attributs dans le code de la vue : Dans le constructeur de la vue personnalisée (habituellement celui qui prend
ContextetAttributeSet), utilisez les classesTypedArrayetobtainStyledAttributespour 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
obtainStyledAttributesretourne unTypedArray, à 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'appelerrecycle()pour libérer les ressources.