0
votes

Les marges pour les boutons ne se définissent pas dans Android par programme

J'ai le code suivant pour générer des objets de bouton avec un texte défini, onclick commande (plus ou moins), hauteur, largeur et margins xxx pré>

avec cette méthode pour obtenir le DP p> xxx pré>

mais lorsque j'exécute l'application, le bouton dispose de la hauteur et de la largeur appropriées, ainsi que du texte approprié et onlick action, mais ils n'ont pas de marges, elles sont toutes groupées, elles sont toutes groupées dans un coin p>

la vue Hierchy selon l'inspecteur de layouche dans Android Studio va P>

DecorView
   LinearLayout
      FrameLayout
          FitWindowLinearLayout
             ContentFrameLayout
                CoordinatorLayout
                   ViewPager
                      ConstraintLayout
                         ConstraintLayout
                            Buttons


3 commentaires

Pouvez-vous partager le code où vous ajoutez les vues générées à votre hiérarchie?


@basilisk ((ContrainteLayout) root.findviewyID (r.id.constraintArtLayout)) .Adddview (GenerateBut Ton ("On", 'A', 50 100, 16,8); Comme je l'ai dit, j'ai essayé d'utiliser contraintelayout.layoutparams et il n'y a toujours pas de marge


setmargins utilise des pixels


3 Réponses :


0
votes
public void setMargins (int left, int top, int right, int bottom)
This is the signature for setMargins method. You call the method with right = 0 and bottom = 0. So you will not have the margins on right and bottom. Try to set some values for right and bottom.

1 commentaires

Nope, et je n'ai jamais eu à régler des marges sur les 4 côtés, typiquement juste le dessus et le côté gauche. Même dans l'éditeur de mise en page WYSIWYG, vous pouvez simplement définir la marge de 2, même un côté, et Android montrera toujours correctement la ou les marges.



1
votes

Pour les vues qui sont des enfants de contrainteTlayout, vous devez ajouter des contraintes horizontales et verticales. Sinon, ils ne sauront pas comment les placer et les placeront dans le coin supérieur gauche.

Vous pouvez utiliser le contraintlayout.layoutparams et définir les contraintes par

lp.lefttoleft , lp.lefttolight et des méthodes similaires ici

Ainsi, par exemple, si vous souhaitez placer ces boutons l'une après l'autre verticalement, vous contraindrez chaque bouton horizontalement au parent et verticalement au bouton précédent.


2 commentaires

En ce moment, cela fonctionne (je dis en ce moment parce que tout ce que je sais, ce sont les boutons ne sont pas groupés, ils sont en fait je pense où ils devraient être) alors merci de vous remercier


Génial! Je vous recommanderai également d'explorer les contraintes de contrainte dans l'onglet Conception de la mise en page, car elles peuvent être un peu difficiles à visualiser parfois.



1
votes

Vous devez utiliser layoutParams pour définir les marges de vos boutons: ` xxx pré>

en fonction de la mise en page que vous utilisez, vous devez utiliser RelatelayOut.layoutParams ou linearlayout.layoutparams. P>

Et pour convertir votre mesure DP en pixel, essayez ceci: p>

Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(
        TypedValue.COMPLEX_UNIT_DIP,
        yourdpmeasure, 
        r.getDisplayMetrics()
);


0 commentaires