proyectos - Android usando diseños como plantilla para crear múltiples instancias de diseño
plantillas para android free (2)
Para cualquiera que todavía esté buscando una solución similar, aparentemente también puede usar include
directamente en xml y aún así poder referirse a ellos en código:
LinearLayout row1 = (LinearLayout) findViewById(R.id.row1)
TextView text1 = row1.findViewById(R.id.text);
LinearLayout row2 = (LinearLayout) findViewById(R.id.row2)
TextView text2 = row2.findViewById(R.id.text);
Fuente: Romain Guy
OK, entonces entiendo cómo usar la etiqueta de inclusión pero me he encontrado con un problema.
Básicamente quiero tener un diseño definido en xml que tenga un par de TextView
y un ImageView
en él. Luego quiero iterar a través de una matriz y poblar los campos dentro del diseño xml dependiendo de qué está en una matriz (que se llena en el tiempo de ejecución). De este modo, se realizan copias múltiples del diseño xml y se rellenan los campos con datos únicos. Ahora no tengo idea de cómo puede volver a utilizar este LinearLayout
de esta manera, ya que los TextView
y los ImageView
tienen una identificación constante y necesito hacer varias copias de este diseño.
¿Hay alguna manera de inflar un recurso y luego hacer una copia de él, eso funcionaría ... Entonces
LinearLayout one = new LinearLayout(inflater.inflate(R.layout.home, container, false));
^ No hay un constructor así desafortunadamente.
La única otra forma es hacerlo todo programáticamente, pero preferiría tener las propiedades de las vistas y LinearLayout
en xml en lugar de en el código. Es como si quisiera que LinearLayout
fuera una plantilla de la que puedes hacer copias, supongo ... Realmente no estoy seguro si eso es posible.
Usted puede hacer esto fácilmente, solo tiene que descomponerlo. Primero, carga el diseño en el que desea insertar sus vistas dinámicas. Luego, infle su subvista y la rellene tantas veces como lo necesite. Luego, agrega la vista a su diseño principal y finalmente establece la vista de contenido de la actividad en la vista principal.
Aquí hay un ejemplo:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.main,
null);
for (int i = 0; i < 3; i++) {
View custom = inflater.inflate(R.layout.custom, null);
TextView tv = (TextView) custom.findViewById(R.id.text);
tv.setText("Custom View " + i);
parent.addView(custom);
}
setContentView(parent);
aquí está el archivo main.xml en el que estoy insertando:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
</LinearLayout>
y aquí está la vista custom.xml que inflo, llené e inserté dinámicamente:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
Espero que este ejemplo ayude!