studio programacion móviles libros libro desarrollo desarrollar curso aprende aplicaciones android

android - programacion - Cómo agregar vistas mediante programación a vistas



manual de programacion android pdf (4)

Esto es tarde, pero esto puede ayudar a alguien :) :) Para agregar la vista programáticamente probar como

LinearLayout rlmain = new LinearLayout(this); LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT); LinearLayout ll1 = new LinearLayout (this); ImageView iv = new ImageView(this); iv.setImageResource(R.drawable.logo); LinearLayout .LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); iv.setLayoutParams(lp); ll1.addView(iv); rlmain.addView(ll1); setContentView(rlmain, llp);

Esto creará su programa de vista completo de forma matemática. Puede agregar cualquier cantidad de vista como la misma. Espero que esto pueda ayudar. :)

Digamos que tengo un LinearLayout, y quiero agregarle una Vista, en mi programa desde el código de Java. ¿Qué método se usa para esto? No estoy preguntando cómo se hace en XML, lo que sí sé, sino más bien, ¿cómo puedo hacer algo en la línea de esto?

(Una vista) .add (Otra vista)

Como uno puede hacer en Swing.


para cualquiera que esté interesado:

La mejor manera que encontré es utilizar el método estático de inflar View.

View inflatedView = View.inflate(context, yourViewXML, yourLinearLayout);

donde suViewXML es algo así como R.layout.myView

tenga en cuenta que necesita un ViewGroup para agregar una vista (que es cualquier diseño que se le ocurra)

para que un ejemplo digamos que tiene un fragmento que ya se vio inflado y sabe que la vista de raíz es un diseño y desea agregarle una vista:

View view = getView(); // returns base view of the fragment if (view == null) return; if (!(view instanceof ViewGroup)) return; ViewGroup viewGroup = (ViewGroup) view; View popup = View.inflate(viewGroup.getContext(), R.layout.someView, viewGroup);



Llamar a addView es la respuesta correcta, pero necesita hacer un poco más de eso para que funcione.

Si crea una vista a través de un constructor (por ejemplo, Button myButton = new Button(); ), necesitará llamar a setLayoutParams en la vista recién construida, pasando una instancia de la clase interna LayoutParams de la vista principal, antes de agregar su niño recién construido a la vista principal.

Por ejemplo, puede tener el siguiente código en su función onCreate() suponiendo que su LinearLayout tiene id R.id.main :

LinearLayout myLayout = findViewById(R.id.main); Button myButton = new Button(this); myButton.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); myLayout.addView(myButton);

Asegurarse de establecer los LayoutParams es importante. Cada vista necesita al menos un layout_width y un parámetro de layout_height. También es importante obtener la clase interna correcta. Luché para que Views se agregara a TableRow para que se muestre correctamente hasta que descubrí que no estaba pasando una instancia de TableRow.LayoutParams a setLayoutParams de la vista hija.