Middle
Cum se adaugă atribute personalizate pentru o vedere personalizată în Android?
sobes.tech AI
Răspuns de la AI
-
Definirea atributelor în
attrs.xml: Se creează fișierulres/values/attrs.xml(sau se adaugă la unul existent). În acesta se definește<declare-styleable>cu numele vizualizării personalizate și se listează<attr>pentru fiecare atribut personalizat, indicând formatul (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> -
Utilizarea atributelor în layout XML: În layout-ul XML în care este utilizat vizualizarea personalizată, se adaugă atribute specifice folosind spațiul de nume
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="Salut Vizualizare Personalizată" app:customColor="@color/colorPrimary" app:customEnabled="true"/> -
Citirea atributelor în codul vizualizării: În constructorul vizualizării personalizate (de obicei cel care primește
ContextșiAttributeSet), se folosesc claseleTypedArrayșiobtainStyledAttributespentru a citi valorile atributelor specificate în XML.class MyCustomView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { // Variabile pentru stocarea valorilor atributelor private var customText: String? = null private var customColor: Int = 0 private var customEnabled: Boolean = false init { // Obținerea unui TypedArray cu atributele val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0) try { // Citirea valorilor atributelor customText = typedArray.getString(R.styleable.MyCustomView_customText) customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Valoare implicită customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Valoare implicită // Acum se pot folosi customText, customColor și customEnabled pentru configurarea vizualizării // De exemplu: // if (customEnabled) { /* ... */ } } finally { // Este important! Eliberarea resurselor prin apelarea recycle() typedArray.recycle() } } // ... restul logicii vizualizării ... }