Middle
Πώς να προσθέσετε προσαρμοσμένα χαρακτηριστικά για μια προσαρμοσμένη προβολή στο Android;
sobes.tech AI
Απάντηση από AI
-
Ορισμός ιδιοτήτων στο
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> -
Χρήση των ιδιοτήτων στο 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"/> -
Ανάγνωση ιδιοτήτων στον κώδικα της προβολής: Στον κατασκευαστή της προσαρμοσμένης προβολής (συνήθως αυτόν που δέχεται
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() } } // ... υπόλοιπη λογική της προβολής ... }