La idea de establecer restricciones mediante programación puede ser agotadora. Esta solución a continuación funcionará para cualquier diseño, ya sea de restricción, lineal, etc. La mejor manera sería establecer un marcador de posición, es decir, un FrameLayout con las restricciones adecuadas (o la colocación adecuada en otro diseño como lineal) en la posición donde esperaría la vista creada mediante programación. tener.
Todo lo que necesita hacer es inflar la vista mediante programación y de forma secundaria a FrameLayout mediante el addChild()método. Luego, durante el tiempo de ejecución, su vista se inflará y se colocará en la posición correcta. Según la recomendación de Android, debe agregar solo un childView a FrameLayout [enlace] .
Así es como se vería su código, suponiendo que desee crear TextView mediante programación en una posición particular:
Paso 1:
En su diseño que contendría la vista que se inflará, coloque un FrameLayout en la posición correcta y dele una identificación, por ejemplo, "contenedor".
Paso 2
Cree un diseño con elemento raíz como la vista que desea inflar durante el tiempo de ejecución, llame al archivo de diseño como "textview.xml":
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
</TextView>
Por cierto, configure los parámetros de diseño de su frameLayout en wrap_content siempre que no sea así, el diseño del marco será tan grande como el padre, es decir, la actividad, es decir, la pantalla del teléfono.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
Si no se establece, porque una vista secundaria del marco, por defecto, va a la parte superior izquierda del diseño del marco, por lo tanto, su vista simplemente volará a la parte superior izquierda de la pantalla.
Paso 3
En su método oncreate, haga esto:
FrameLayout frameLayout = findViewById(R.id.container);
TextView textView = (TextView) View.inflate(this, R.layout.textview, null);
frameLayout.addView(textView);
(Tenga en cuenta que la configuración último parámetro de findViewByIda nully la adición de vista llamando addView()a la vista recipiente (FrameLayout) es el mismo que simplemente fijar la vista inflado mediante el paso trueen tercero parámetro de findViewById(). Para más información, ver este .)