Sobes.tech
Middle

Hogyan adjunk hozzá egyedi attribútumokat az Androidon egy egyedi nézethez?

sobes.tech MI

Válasz az MI-től

  1. Attribútumok meghatározása az attrs.xml-ben: Létrehozunk egy res/values/attrs.xml fájlt (vagy hozzáadjuk a meglévőhöz). Ebben meghatározunk egy <declare-styleable>-t a saját View nevét megadva, és felsoroljuk az <attr>-okat minden egyedi attribútumhoz, megadva azok formátumát (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. Attribútumok használata XML-ben: A layout XML-ben, ahol a saját View-t használjuk, hozzáadjuk a meghatározott attribútumokat az app névtér használatával.

    <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"/>  
    
  3. Attribútumok olvasása a View kódban: A saját View konstruktorában (általában, amely elfogad Context-et és AttributeSet-et), a TypedArray és az obtainStyledAttributes osztályokat használjuk az XML-ben megadott attribútumértékek olvasására.

    class MyCustomView @JvmOverloads constructor(  
        context: Context,  
        attrs: AttributeSet? = null,  
        defStyleAttr: Int = 0  
    ) : View(context, attrs, defStyleAttr) {  
    
        // Példák az attribútumértékek tárolására
        private var customText: String? = null  
        private var customColor: Int = 0  
        private var customEnabled: Boolean = false  
    
        init {  
            // TypedArray beszerzése az attribútumokkal
            val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0)  
    
            try {  
                // Az attribútumértékek olvasása
                customText = typedArray.getString(R.styleable.MyCustomView_customText)  
                customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Alapértelmezett érték
                customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Alapértelmezett érték
    
                // Most már használhatjuk a customText, customColor és customEnabled értékeket a View konfigurálásához
                // Például:
                // if (customEnabled) { /* ... */ }
    
            } finally {  
                // Fontos! A TypedArray újrahasznosítása a források felszabadításához
                typedArray.recycle()  
            }  
        }  
    
        // ... a View többi logikája ...  
    }  
    

A obtainStyledAttributes metódus egy TypedArray-t ad vissza, amelyből kiolvashatók az attribútumértékek azok indexei alapján (amelyeket a R osztály generál). Használat után fontos a recycle() metódus hívása a források felszabadításához.