Kaip pridėti naudotojo nustatytus atributus prie „Android“ pritaikytos peržiūros?
sobes.tech AI
Atsakymas iš AI
-
Attribūtų apibrėžimas
attrs.xml: Sukuriamas failasres/values/attrs.xml(arba pridedamas prie esamo). Jame apibrėžiama<declare-styleable>su jūsų individualaus View pavadinimu ir išvardijami<attr>kiekvienam naudotojo atributui, nurodant jų 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> -
Attribūtų naudojimas XML: XML makete, kur naudojamas individualus View, pridedami nustatyti atributai naudojant
appvardų erdvę.<com.example.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" app:customText="Hello Custom View" app:customColor="@color/colorPrimary" app:customEnabled="true"/> -
Atributų skaitymas View kode: Per savo View konstruktorių (dažniausiai tą, kuris priima
ContextirAttributeSet), naudojamiTypedArrayirobtainStyledAttributesklasės, norint perskaityti XML nurodytas atributų reikšmes.class MyCustomView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : View(context, attrs, defStyleAttr) { // Kintamieji atributų reikšmėms saugoti private var customText: String? = null private var customColor: Int = 0 private var customEnabled: Boolean = false init { // Gauti TypedArray su atributais val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0) try { // Skaityti atributų reikšmes customText = typedArray.getString(R.styleable.MyCustomView_customText) customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Numatytoji reikšmė customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Numatytoji reikšmė // Dabar galite naudoti customText, customColor ir customEnabled View konfigūravimui // Pavyzdžiui: // if (customEnabled) { /* ... */ } } finally { // Svarbu! `TypedArray` perdirbimas resursų išlaisvinimui typedArray.recycle() } } // ... kita View logika ... }
obtainStyledAttributes metodas grąžina TypedArray, iš kurio galima išgauti atributų reikšmes pagal jų indeksus (kuriuos generuoja R klasė). Po naudojimo būtina iškviesti recycle() resursų išlaisvinimui.