Come collegare una vista personalizzata a un layout personalizzato?
sobes.tech AI
Risposta dell'AI
Ci sono diversi metodi:
-
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" /> -
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.xmlpotrebbe 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
MyCompositeViewviene 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.