J'essaie d'atteindre les programmes suivants (plutôt que de manière déclarative via XML):
<RelativeLayout...>
<TextView ...
android:id="@+id/label1" />
<TextView ...
android:id="@+id/label2"
android:layout_below: "@id/label1" />
</RelativeLayout>
En d'autres termes, comment faire apparaître le second en TextView
dessous du premier, mais je veux le faire en code:
RelativeLayout layout = new RelativeLayout(this);
TextView label1 = new TextView(this);
TextView label2 = new TextView(this);
...
layout.addView(label1);
layout.addView(label2);
setContentView(layout);
Mettre à jour:
Merci, TreeUK. Je comprends la direction générale, mais cela ne fonctionne toujours pas - "B" chevauche "A". Qu'est-ce que je fais mal?
RelativeLayout layout = new RelativeLayout(this);
TextView tv1 = new TextView(this);
tv1.setText("A");
TextView tv2 = new TextView(this);
tv2.setText("B");
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT);
lp.addRule(RelativeLayout.RIGHT_OF, tv1.getId());
layout.addView(tv1);
layout.addView(tv2, lp);
Réponses:
D'après ce que j'ai pu reconstituer, vous devez ajouter la vue à l'aide de LayoutParams.
Tout crédit à sechastain, pour positionner relativement vos articles par programme, vous devez leur attribuer des identifiants.
ensuite
addRule(RelativeLayout.RIGHT_OF, tv1.getId());
la source
below
a déjà été ajoutée, comment s'assurer qu'elle s'affiche toujours correctement? D'après ma compréhensionaddView
, la mise en page est rendue à nouveau, donc si je le fais pour un élément dont le parent n'a pas encore été ajouté, il se bloquera car l'élément avec cet ID n'existe pas encore.Pour faire court: avec la mise en page relative, vous positionnez les éléments à l'intérieur de la mise en page.
créer un nouveau RelativeLayout.LayoutParams
(peu importe ... remplir le contenu parent ou d'habillage, des nombres absolus si vous le devez, ou une référence à une ressource XML)
Ajouter des règles: les règles se réfèrent au parent ou à d'autres "frères" de la hiérarchie.
Il suffit d'appliquer les paramètres de mise en page: La façon la plus «saine» de le faire est:
Attention : ne modifiez pas la mise en page à partir des rappels de mise en page. Il est tentant de le faire car c'est à ce moment que les vues obtiennent leur taille réelle. Cependant, dans ce cas, des résultats inattendus sont attendus.
la source
parentLayout.addView(myView, lp
). J'ai toujours fait ça en deux lignes de code. Je vous remercie!Je viens de passer 4 heures avec ce problème. Enfin réalisé que vous ne devez pas utiliser zéro comme id de vue . On pourrait penser que c'est autorisé comme NO_ID == -1, mais les choses ont tendance à se détraquer si vous le donnez à votre vue ...
la source
Exemple exécutable minimal d'Android 22
La source:
Fonctionne avec le projet par défaut généré par
android create project ...
. Dépôt GitHub avec un code de construction minimal .la source
TextView
? J'ai essayé et le troisièmeTextView
manque.appel
après
la source
Essayer:
la source
Cette approche avec ViewGroup.MarginLayoutParams a fonctionné pour moi:
la source
la source
Si vous voulez vraiment mettre en page manuellement, je vous suggère de ne pas utiliser du tout une mise en page standard. Faites tout par vous-même, voici un exemple de kotlin:
Cela pourrait vous donner une idée de la façon dont cela pourrait fonctionner
la source