Sobes.tech
Middle

Come collegare una vista personalizzata a un layout personalizzato?

sobes.tech AI

Risposta dell'AI

Ci sono diversi metodi:

  1. Utilizzo del costruttore con un insieme di attributi AttributeSet: Questo è il metodo più comune. Nel costruttore di View, puoi leggere gli attributi dal markup XML e applicarli.

    public class MyCustomView extends View {
    
        public MyCustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // Lettura degli attributi da attrs
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
            // Ottenere valori degli attributi, ad esempio:
            // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue);
            a.recycle(); // È importante liberare TypedArray
    
            // Inizializzazione della View basata sugli attributi letti
            // ...
        }
    
        // ... altri costruttori e metodi
    }
    

    Quando si definisce un layout personalizzato in XML, si possono usare questi attributi:

    <com.example.app.MyCustomView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:someAttribute="someValue" />
    
  2. Inflazione del layout all'interno della View: Se la View è composta da più altre View, è possibile inflarle da un file XML separato all'interno della View personalizzata.

    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);
            // Ora puoi trovare gli elementi all'interno di my_custom_layout
            // TextView myTextView = findViewById(R.id.myTextView);
            // ...
        }
    
        // ... altri costruttori e metodi
    }
    

    my_custom_layout.xml potrebbe apparire così:

    <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="Ciao Layout Personalizzato!" />
    
        <!-- altri elementi layout -->
    
    </LinearLayout>
    

    Poi, questo layout personalizzato MyCompositeView viene usato in un altro file XML:

    <com.example.app.MyCompositeView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    

La scelta del metodo dipende dalla complessità della View personalizzata: per View semplici con pochi elementi, il primo metodo è sufficiente; per View composte con una struttura interna più complessa, il secondo metodo è più adatto.