Sobes.tech
Middle

Cum leag o View personalizată de un Layout personalizat?

sobes.tech AI

Răspuns de la AI

Există mai multe metode:

  1. 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" />
    
  2. 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.xml poate 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 MyCompositeView este 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ă.