281 votes

Définir les marges dans un LinearLayout par programme

Je suis en train d'utiliser Java (non XML) pour créer un LinearLayout avec des boutons qui remplissent l'écran, et avoir des marges. Voici le code qui fonctionne sans marges:

  LinearLayout buttonsView = new LinearLayout(this);
  buttonsView.setOrientation(LinearLayout.VERTICAL);
  for (int r = 0; r < 6; ++r)
  {
   Button btn = new Button(this);
   btn.setText("A");

   LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
   lp.weight = 1.0f; // This is critical. Doesn't work without it.
   buttonsView.addView(btn, lp);
  }
  ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
  setContentView(buttonsView, lp);

Si cela fonctionne bien, mais comment sur la terre que vous donnez aux boutons des marges, donc il y a de l'espace entre eux? J'ai essayé d'utiliser LinearLayout.MarginLayoutParams, mais n'a pas d' weight membre de sorte qu'il n'est pas bon. Et ça ne fonctionne pas si vous le passez lp dans son constructeur.

Est-ce impossible? Parce qu'il parait il, et il ne serait pas le premier Android tâche de mise en page, vous ne pouvez le faire en XML.

515voto

Mauro Points 1916

Voici un peu de code pour l’effectuer :

64voto

CommonsWare Points 402670

Si cela fonctionne bien, mais comment sur la terre donnez-vous les boutons marges afin il y a de l'espace entre eux?

Vous appelez setMargins() sur le LinearLayout.LayoutParams objet.

J'ai essayé d'utiliser LinearLayout.MarginLayoutParams, mais qui n'a pas de poids membre de sorte qu'il n' bon.

LinearLayout.LayoutParams est une sous-classe de LinearLayout.MarginLayoutParams, comme indiqué dans la documentation.

Est-ce impossible?

Pas de.

il ne serait pas le premier Android tâche de mise en page, vous ne pouvez le faire en XML

Vous êtes invités à fournir la preuve de cette affirmation.

Personnellement, je ne suis pas au courant de tout ce qui ne peut être accomplie à l'aide de XML et non pas par le biais de méthodes de Java dans le SDK. En fait, par définition, tout doit être faisable via Java (mais pas nécessairement par des SDK-accessible méthodes), étant donné que le XML n'est pas le code de l'exécutable. Mais, si vous êtes au courant de quelque chose, point, parce que c'est un bug dans le kit de développement qui devrait se fixe un jour.

31voto

Adam Points 17726

Pour ajouter des marges directement aux éléments (certains éléments permettent l’édition directe des marges), vous pouvez faire :

.. .cette fonctionne sans avoir besoin de connaître / modifier la disposition environnante. Note la vérification « instanceof » dans le cas où vous essayer d’exécutez ce contre quelque chose qui ne supporte pas les marges.

22voto

Rupesh Yadav Points 2721

En raison de la variation de densité de pixel écran périphérique son bon de toujours utiliser `` unité de fixer la marge par programme. Comme below_

Espérons que cela aidera.

7voto

Karan Bhalodiya Points 29

Essaye ça

  LayoutParams params = new LayoutParams(
            LayoutParams.WRAP_CONTENT,      
            LayoutParams.WRAP_CONTENT
    );
    params.setMargins(left, top, right, bottom);
    yourbutton.setLayoutParams(params);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X