Sobes.tech
Middle

Πώς να συνδέσετε μια προσαρμοσμένη προβολή με μια προσαρμοσμένη διάταξη;

sobes.tech AI

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

Υπάρχουν διάφοροι τρόποι:

  1. Χρήση του κατασκευαστή με ένα σύνολο ιδιοτήτων AttributeSet: Αυτός είναι ο πιο συνηθισμένος τρόπος. Στον κατασκευαστή της View, μπορείτε να διαβάσετε τις ιδιότητες από την XML σήμανση και να τις εφαρμόσετε.

    public class MyCustomView extends View {
    
        public MyCustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // Ανάγνωση ιδιοτήτων από attrs
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
            // Απόκτηση τιμών ιδιοτήτων, π.χ.:
            // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue);
            a.recycle(); // Είναι σημαντικό να ελευθερώσετε το TypedArray
    
            // Αρχικοποίηση της View βάσει των διαβασμένων ιδιοτήτων
            // ...
        }
    
        // ... άλλοι κατασκευαστές και μέθοδοι
    }
    

    Κατά τον ορισμό ενός προσαρμοσμένου layout σε XML, μπορείτε να χρησιμοποιήσετε αυτές τις ιδιότητες:

    <com.example.app.MyCustomView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:someAttribute="someValue" />
    
  2. Ενίσχυση του layout μέσα στη View: Αν η View αποτελείται από πολλές άλλες View, μπορείτε να τις ενισχύσετε από ένα ξεχωριστό αρχείο XML μέσα στην προσαρμοσμένη View.

    public class MyCompositeView extends LinearLayout {
    
        public MyCompositeView(Context context, AttributeSet attrs) {
            super(context, attrs);
            LayoutInflater.from(context).inflate(R.layout.my_custom_layout, this, true);
            // Τώρα μπορείτε να βρείτε στοιχεία μέσα στο my_custom_layout
            // TextView myTextView = findViewById(R.id.myTextView);
            // ...
        }
    
        // ... άλλοι κατασκευαστές και μέθοδοι
    }
    

    Το my_custom_layout.xml μπορεί να μοιάζει έτσι:

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/myTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Γειά σου, προσαρμοσμένη διάταξη!" />
    
        <!-- άλλα στοιχεία διάταξης -->
    
    </LinearLayout>
    

    Στη συνέχεια, αυτή η προσαρμοσμένη διάταξη MyCompositeView χρησιμοποιείται σε ένα άλλο αρχείο XML:

    <com.example.app.MyCompositeView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    

Η επιλογή της μεθόδου εξαρτάται από την πολυπλοκότητα της προσαρμοσμένης View: για απλές View με ελάχιστα στοιχεία, αρκεί η πρώτη μέθοδος. Για σύνθετες View με πιο πολύπλοκη εσωτερική δομή, η δεύτερη μέθοδος είναι πιο κατάλληλη.