Sobes.tech
Middle

Hoe koppel ik een aangepaste View aan een aangepaste Layout?

sobes.tech AI

Antwoord van AI

Er zijn verschillende manieren:

  1. Gebruik van de constructor met een set attributen AttributeSet: Dit is de meest gebruikelijke manier. In de constructor van de View kun je de attributen uit de XML-markering lezen en toepassen.

    public class MyCustomView extends View {
    
        public MyCustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // Lees attributen uit attrs
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
            // Verkrijg waarden van attributen, bijvoorbeeld:
            // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue);
            a.recycle(); // Het is belangrijk om de TypedArray vrij te maken
    
            // Initialiseer de View op basis van de gelezen attributen
            // ...
        }
    
        // ... andere constructors en methoden
    }
    

    Bij het definiëren van een aangepaste layout in XML, kun je deze attributen gebruiken:

    <com.example.app.MyCustomView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:someAttribute="someValue" />
    
  2. Inflateer de layout binnen de View: Als de View uit meerdere andere Views bestaat, kun je deze inflaten vanuit een apart XML-bestand binnen de aangepaste 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);
            // Nu kun je elementen binnen my_custom_layout vinden
            // TextView myTextView = findViewById(R.id.myTextView);
            // ...
        }
    
        // ... andere constructors en methoden
    }
    

    my_custom_layout.xml kan er zo uitzien:

    <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="Hallo, aangepaste layout!" />
    
        <!-- andere layout-elementen -->
    
    </LinearLayout>
    

    Vervolgens wordt deze aangepaste layout MyCompositeView in een ander XML-bestand gebruikt:

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

De keuze van de methode hangt af van de complexiteit van de aangepaste View: voor eenvoudige Views met weinig elementen is de eerste methode voldoende; voor samengestelde Views met een meer complexe interne structuur is de tweede methode geschikter.