Sobes.tech
Middle

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:

  1. 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" />
    
  2. 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ő.