¿Cómo vincular una vista personalizada con un diseño personalizado?
sobes.tech AI
Respuesta de la IA
Hay varias formas:
-
Uso del constructor con un conjunto de atributos
AttributeSet: Esta es la forma más común. En el constructor de View, puedes leer los atributos del marcado XML y aplicarlos.public class MyCustomView extends View { public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); // Leer atributos de attrs TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView); // Obtener valores de atributos, por ejemplo: // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue); a.recycle(); // Es importante liberar TypedArray // Inicializar la vista basada en los atributos leídos // ... } // ... otros constructores y métodos }Al definir un layout personalizado en XML, puedes usar estos atributos:
<com.example.app.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" app:someAttribute="someValue" /> -
Inflado del layout dentro de la vista: Si la vista consiste en varias otras vistas, puedes inflarlas desde un archivo XML separado dentro de la vista personalizada.
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); // Ahora puedes encontrar elementos dentro de my_custom_layout // TextView myTextView = findViewById(R.id.myTextView); // ... } // ... otros constructores y métodos }my_custom_layout.xmlpodría verse así:<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="¡Hola, diseño personalizado!" /> <!-- otros elementos del layout --> </LinearLayout>Luego, este layout personalizado
MyCompositeViewse usa en otro archivo XML:<com.example.app.MyCompositeView android:layout_width="match_parent" android:layout_height="wrap_content" />
La elección del método depende de la complejidad de la vista personalizada: para vistas simples con pocos elementos, el primer método es suficiente; para vistas compuestas con estructura interna más compleja, el segundo método es más adecuado.