Cum leag o View personalizată de un Layout personalizat?
sobes.tech AI
Răspuns de la AI
Există mai multe metode:
-
Utilizarea constructorului cu un set de atribute
AttributeSet: Aceasta este metoda cea mai comună. În constructorul View, poți citi atributele din marcajul XML și le poți aplica.public class MyCustomView extends View { public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); // Citirea atributelor din attrs TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView); // Obținerea valorilor atributelor, de exemplu: // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue); a.recycle(); // Este important să eliberezi TypedArray // Inițializarea View pe baza atributelor citite // ... } // ... alte constructor și metode }La definirea unui layout personalizat în XML, poți folosi aceste atribute:
<com.example.app.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" app:someAttribute="someValue" /> -
Inflarea layout-ului în interiorul View-ului: Dacă View-ul constă din mai multe alte View-uri, le poți infla dintr-un fișier XML separat în interiorul View-ului personalizat.
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); // Acum poți găsi elemente în interiorul my_custom_layout // TextView myTextView = findViewById(R.id.myTextView); // ... } // ... alte constructor și metode }my_custom_layout.xmlpoate arăta astfel:<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="Salut, layout personalizat!" /> <!-- alte elemente ale layout-ului --> </LinearLayout>Apoi, acest layout personalizat
MyCompositeVieweste utilizat într-un alt fișier XML:<com.example.app.MyCompositeView android:layout_width="match_parent" android:layout_height="wrap_content" />
Alegerea metodei depinde de complexitatea View-ului personalizat: pentru Views simple cu un număr mic de elemente, prima metodă este suficientă; pentru Views compuse cu o structură internă mai complexă, a doua metodă este mai potrivită.