Sobes.tech
Middle

Πώς να προσθέσετε προσαρμοσμένα χαρακτηριστικά για μια προσαρμοσμένη προβολή στο Android;

sobes.tech AI

Απάντηση από AI

  1. Ορισμός ιδιοτήτων στο attrs.xml: Δημιουργείται το αρχείο res/values/attrs.xml (ή προστίθεται σε ένα υπάρχον). Σε αυτό ορίζεται <declare-styleable> με το όνομα της προσαρμοσμένης προβολής και καταγράφονται <attr> για κάθε προσαρμοσμένη ιδιότητα, αναφέροντας τη μορφή (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. Χρήση των ιδιοτήτων στο XML διάταξης: Στο XML διάταξης όπου χρησιμοποιείται η προσαρμοσμένη προβολή, προστίθενται συγκεκριμένες ιδιότητες χρησιμοποιώντας το namespace 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="Γεια σου Προσαρμοσμένη Προβολή"  
        app:customColor="@color/colorPrimary"  
        app:customEnabled="true"/>  
    
  3. Ανάγνωση ιδιοτήτων στον κώδικα της προβολής: Στον κατασκευαστή της προσαρμοσμένης προβολής (συνήθως αυτόν που δέχεται Context και AttributeSet), χρησιμοποιούνται οι κλάσεις TypedArray και obtainStyledAttributes για την ανάγνωση των τιμών των ιδιοτήτων που ορίζονται στο XML.

    class MyCustomView @JvmOverloads constructor(  
        context: Context,  
        attrs: AttributeSet? = null,  
        defStyleAttr: Int = 0  
    ) : View(context, attrs, defStyleAttr) {  
    
        // Μεταβλητές για αποθήκευση των τιμών των ιδιοτήτων  
        private var customText: String? = null  
        private var customColor: Int = 0  
        private var customEnabled: Boolean = false  
    
        init {  
            // Απόκτηση TypedArray με τις ιδιότητες  
            val typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView, defStyleAttr, 0)  
    
            try {  
                // Ανάγνωση των τιμών των ιδιοτήτων  
                customText = typedArray.getString(R.styleable.MyCustomView_customText)  
                customColor = typedArray.getColor(R.styleable.MyCustomView_customColor, 0) // Προεπιλεγμένη τιμή  
                customEnabled = typedArray.getBoolean(R.styleable.MyCustomView_customEnabled, false) // Προεπιλεγμένη τιμή  
    
                // Τώρα μπορούν να χρησιμοποιηθούν τα customText, customColor και customEnabled για τη διαμόρφωση της προβολής  
                // Για παράδειγμα:  
                // if (customEnabled) { /* ... */ }  
    
            } finally {  
                // Σημαντικό! Απελευθέρωση πόρων με την κλήση recycle()  
                typedArray.recycle()  
            }  
        }  
    
        // ... υπόλοιπη λογική της προβολής ...  
    }