Hoe koppel ik een aangepaste View aan een aangepaste Layout?
sobes.tech AI
Antwoord van AI
Er zijn verschillende manieren:
-
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" /> -
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.xmlkan 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
MyCompositeViewin 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.