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();
), que necesita para llamar setLayoutParams
en la vista de nueva construcción, pasando por una instancia de LayoutParams de la vista padre clase interna, antes de agregar a su hijo recién construido a la vista principal
Por ejemplo, usted podría tener el siguiente código en su función onCreate()
asumiendo que su LinearLayout tiene R.id.main
Identificación:
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 las 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. Tuve problemas para mostrar Vistas en un TableRow para que se mostrara correctamente hasta que descubrí que no estaba pasando una instancia de TableRow.LayoutParams a setLayoutParams de la vista hija.
¿Cómo crear la vista progra máticamente, pero al usar un archivo de diseño XML que usted específicamente escribió para esta nueva vista? – SK9
@ SK9 Utilizaría un LayoutInflater, que puede obtener de un contexto, generalmente la actividad actual. Algo como: LayoutInflater myInflater = getLayoutInflater; Ver myView = myInflater.inflate (R.layout.myLayout, parent, false); –
En realidad, getLayoutInflater() proviene de la clase Window (no del contexto), y es un método práctico en Activity. –