Hogyan köthetem össze a felhasználói nézetet a felhasználói elrendezéssel?
sobes.tech MI
Válasz az MI-től
Számos módszer létezik:
-
Az attribútumkészletet (
AttributeSet) használó konstruktor: Ez a leggyakoribb módszer. A View konstruktorában beolvashatja az XML markupból az attribútumokat, és alkalmazhatja azokat.public class MyCustomView extends View { public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); // Az attribútumok olvasása az attrs-ból TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView); // Az attribútumértékek lekérése, például: // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue); a.recycle(); // Fontos a TypedArray felszabadítása // A beolvasott attribútumok alapján történő View inicializálás // ... } // ... más konstruktorok és metódusok }Egy egyedi layout XML-ben történő definiálásakor ezeket az attribútumokat használhatja:
<com.example.app.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" app:someAttribute="someValue" /> -
Layout inflálása a View belsejében: Ha a View több más View-ból áll, azokat külön XML fájlból inflálhatja be a saját View-jában.
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); // Most már megtalálhatja az elemeket a my_custom_layout-ban // TextView myTextView = findViewById(R.id.myTextView); // ... } // ... más konstruktorok és metódusok }A
my_custom_layout.xmlígy nézhet ki:<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="Helló, egyedi elrendezés!" /> <!-- más elrendezési elemek --> </LinearLayout>Ezután ezt az egyedi layoutot,
MyCompositeView-t egy másik XML-fájlban használhatja:<com.example.app.MyCompositeView android:layout_width="match_parent" android:layout_height="wrap_content" />
A módszer kiválasztása a saját View összetettségétől függ: egyszerű View-k esetén az első módszer elegendő, összetettebb belső struktúrájú View-k esetén a második módszer a megfelelő.