Je rencontre des difficultés avec une interface utilisateur générée au moment de l'exécution qui ne respecte pas les contraintes. Par d'autres réponses et de la documentation pour Android, j'ai essayé ConstraintSet
ainsi que d'autres méthodes.Application de contraintes d'exécution pour ConstraintLayout dans LinearLayout
J'étends ConstraintLayout
pour une classe personnalisée qui fait partie intégrante de la fonctionnalité de l'application. Je tire des données d'un serveur Web qui crée ensuite ces objets et les ajoute à un LinearLayout
. Les LinearLayout
, ConstraintLayout
et TextView
montrent tous leurs tailles appropriées; cependant, les TextView
se chevauchent et refusent de respecter les contraintes.
Je peux créer une copie de ce que je veux faire manuellement via l'éditeur de disposition, et cela fonctionne très bien.
Ma configuration actuelle (this
étend ConstraintLayout, text_name
et text_points
sont TextView
s):
this.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
this.addView(text_name);
this.addView(text_points);
ConstraintSet constraints = new ConstraintSet();
constraints.clone(this);
constraints.constrainHeight(text_points.getId(), WRAP_CONTENT);
constraints.constrainWidth(text_points.getId(), WRAP_CONTENT);
constraints.constrainHeight(text_name.getId(), WRAP_CONTENT);
constraints.constrainWidth(text_name.getId(), WRAP_CONTENT);
constraints.connect(text_name.getId(), LEFT, getId(), LEFT);
constraints.connect(text_points.getId(), RIGHT, getId(), RIGHT);
constraints.applyTo(this);
constrainWidth
et constrainHeight
travail; quand je m'en débarrasse ou que je change les valeurs, cela a un effet. Cependant, aucune des affaires de connect
ne fait rien. Les TextView
ont les bonnes tailles pour leur texte, mais n'obéissent à aucune contrainte. Ai-je manqué une ligne qui fait .connect
s travail? Pour clarifier: J'ai ScrollView
->LinearLayout
->ConstraintLayout
->Lorsqu'elles sont créées dans l'éditeur, les contraintes fonctionnent correctement. Lorsqu'elles sont créées dans l'instanciation du ConstraintLayout
lors de l'exécution à l'aide d'un ConstraintSet
, les contraintes connectées n'ont aucun effet, contrairement aux autres propriétés.
EDIT: Juste pour confirmer, voici une sortie du nombre de lignes ajoutées à la LinearLayout (LOCS), la taille de la LinearLayout (LDIM), la taille de la ConstraintLayout (LOCDIM) et tailles les TextViews (TVDIM, TV2DIM):
09-03 14:19:18.664 D/LOCS: 2
09-03 14:19:18.665 D/LDIM: 1080 w
09-03 14:19:18.665 D/LDIM: 58 h
09-03 14:19:18.665 D/LOCDIM: 1080 w
09-03 14:19:18.666 D/LOCDIM: 29 h
09-03 14:19:18.667 D/TVDIM: 165 w
09-03 14:19:18.667 D/TVDIM: 29 h
09-03 14:19:18.668 D/TV2DIM: 29 w
09-03 14:19:18.668 D/TV2DIM: 29 h
Pas de chance avec celui-ci.Est-il possible qu'il devrait être fait après le premier rendu? –
Ces méthodes que j'ai supposé ont été utilisées dans une méthode onCreate Activity ou une méthode onCreateView Fragment. Je n'ai jamais essayé dans le cadre de la vue. Si vous publiez votre mise en page, je pourrais être en mesure de fournir des informations supplémentaires. Je pense que la façon dont vous essayez est plus compliquée. – Juan
Je diffuse des données à partir d'un serveur Web étant donné l'emplacement actuel de l'appareil. Sûrement chargement dynamique des données a déjà été fait! La disposition est comme dit avant - 'ScrollView' ->' LinearLayout' -> 'ConstraintLayout' ->' TextView'. ConstraintLayout et TextViews sont créés lorsque les données sont chargées. Extended ConstraintLayout pour le constructeur personnalisé afin de transmettre des données. L'extrait ci-dessus provient du constructeur de la classe qui s'étend. –