Middle
Come aggiungere attributi personalizzati per una vista personalizzata in Android?
sobes.tech AI
Risposta dell'AI
-
Definizione degli attributi in
attrs.xml: Viene creato il fileres/values/attrs.xml(o aggiunto a uno esistente). In esso si definisce<declare-styleable>con il nome della vista personalizzata e si elencano<attr>per ogni attributo personalizzato, indicando il loro formato (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> -
Utilizzo degli attributi nel layout XML: Nel layout XML in cui viene usata la vista personalizzata, si aggiungono attributi specifici usando lo spazio dei nomi
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="Ciao Vista Personalizzata" app:customColor="@color/colorPrimary" app:customEnabled="true"/> -
Lettura degli attributi nel codice della View: Nel costruttore della vista personalizzata (di solito quello che riceve
ContexteAttributeSet), si usano le classiTypedArrayeobtainStyledAttributesper leggere i valori degli attributi specificati in XML.class MyCustomView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { // Variabili per memorizzare i valori degli attributi private var customText: String? = null private var customColor: Int = 0 private var customEnabled: Boolean = false init { // Ottenere TypedArray con gli attributi val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0) try { // Lettura dei valori degli attributi customText = typedArray.getString(R.styleable.MyCustomView_customText) customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Valore di default customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Valore di default // Ora si possono usare customText, customColor e customEnabled per configurare la View // Per esempio: // if (customEnabled) { /* ... */ } } finally { // È importante! Liberare le risorse chiamando recycle() typedArray.recycle() } } // ... altra logica della View ... }