Android utilizando diseños como una plantilla para crear múltiples instancias de diseño
Aceptar, Así que entiendo cómo utilizar la etiqueta de inclusión, pero me he encontrado con un problema.
Básicamente quiero tener un diseño definido en xml que tiene un par de TextView
s y un ImageView
en él. A continuación, quiero iterar a través de una matriz y rellenar los campos dentro de la disposición xml dependiendo de lo que está en una matriz (que se rellena en tiempo de ejecución). Así, hacer varias copias del diseño xml y rellenar los campos con datos únicos. Ahora no tengo ni idea de cómo puede reutilizar este LinearLayout
de esta manera como el TextView
s y ImageView
s dentro de él tienen un id constante y tengo que hacer varias copias de este diseño.
- ListFragment Layout desde xml
- ¿Qué significa esto "xmlns: xliff"? XML
- Variables de Android en strings.xml
- Referencia una pantalla de preferencias de Android separada desde dentro de otra pantalla de preferencias en XML
- Cómo acceder a la estructura de cadenas xml siguiente estructura
¿Hay alguna forma de inflar un recurso y luego hacer una copia de él, que funcionaría … Así que
LinearLayout one = new LinearLayout(inflater.inflate(R.layout.home, container, false));
^ No hay ningún constructor como ese desafortunadamente.
La única otra manera es hacerlo todo programatically pero preferiría tener las propiedades de las vistas y el LinearLayout
en xml algo que en el código. Es como si quisiera que el LinearLayout
fuera una plantilla que puedas hacer copias de lo que supongo … Realmente no estoy seguro si eso es posible.
- Error al analizar etiquetas XML no coincidentes
- Tutorial en el analizador DOM
- Excepción lanzada durante TypedArray # getTextArray ()
- Android SlidingPaneLayout se desvanece en las vistas incorrectas
- Ignorar elementos no está permitido aquí, en Android lint.xml
- ¿Cómo puedo mostrar una imagen que acabo de sacar de mi cámara en mi aplicación Android?
- Android Lint report duplicación de <issue>
- Android: Caja blanca no deseada en la parte superior de la pantalla (barra de herramientas?)
Usted puede hacer esto fácilmente, sólo tiene que descomponerlo. Primero carga el diseño en el que desea insertar sus vistas dinámicas. A continuación, inflar su subview y llenarlo tantas veces como lo necesite. A continuación, agrega la vista a la disposición principal y, finalmente, establece la vista de contenido de la actividad en la vista principal.
He aquí 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 que estoy insertando en:
<?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 hincho, relleno e inserto 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!
Para annyone todavía buscando una solución similar, al parecer también se puede utilizar include
directamente en xml y todavía ser capaz de referirse a ellos en el 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
- ¿Cómo puedo crear dinámicamente una lista de todos los componentes de Android ui mediante programación? Por ejemplo, TextView, ImageView, etc
- Android: ClickableSpan en TextView seleccionable