L'idée de définir des contraintes par programmation peut être fastidieuse. Cette solution ci-dessous fonctionnera pour n'importe quelle mise en page qu'elle soit contrainte, linéaire, etc. La meilleure façon serait de définir un espace réservé, c'est-à-dire un FrameLayout avec des contraintes appropriées (ou un placement approprié dans une autre mise en page telle que linéaire) à la position où vous attendez la vue créée par programme avoir.
Tout ce que vous avez à faire est de gonfler la vue par programme et en tant qu'enfant du FrameLayout à l'aide de addChild()method. Ensuite, pendant l'exécution, votre vue serait gonflée et placée dans la bonne position. Selon la recommandation Android, vous ne devez ajouter qu'un seul childView à FrameLayout [lien] .
Voici à quoi ressemblerait votre code, en supposant que vous souhaitiez créer TextView par programme à une position particulière:
Étape 1:
Dans votre mise en page qui contiendrait la vue à gonfler, placez un FrameLayout à la bonne position et donnez-lui un identifiant, par exemple "conteneur".
Étape 2
Créez une mise en page avec l'élément racine comme vue que vous souhaitez gonfler pendant l'exécution, appelez le fichier de mise en page comme "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>
BTW, définissez les paramètres de mise en page de votre frameLayout sur wrap_content, sinon la disposition du cadre deviendra aussi grande que le parent, c'est-à-dire l'activité, c'est-à-dire l'écran du téléphone.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
S'il n'est pas défini, car une vue enfant du cadre, par défaut, va en haut à gauche de la disposition du cadre, par conséquent, votre vue volera simplement vers le haut à gauche de l'écran.
Étape 3
Dans votre méthode oncreate, procédez comme suit:
FrameLayout frameLayout = findViewById(R.id.container);
TextView textView = (TextView) View.inflate(this, R.layout.textview, null);
frameLayout.addView(textView);
(Notez que définir le dernier paramètre de findViewByIdto nullet ajouter une vue en appelant la addView()vue conteneur (frameLayout) équivaut simplement à attacher la vue gonflée en passant le truetroisième paramètre de findViewById(). Pour plus d'informations, voir ceci .)