J'essaie d'utiliser Java ( pas XML ) pour créer un LinearLayout avec des boutons qui remplissent l'écran et ont des marges. Voici du 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);
Donc ça marche bien, mais comment diable donnez-vous les marges des boutons pour qu'il y ait de l'espace entre eux? J'ai essayé d'utiliser LinearLayout.MarginLayoutParams
, mais cela n'a pas de weight
membre donc ce n'est pas bon. Et cela ne fonctionne pas si vous le passez lp
dans son constructeur non plus.
Est-ce impossible? Parce que ça y ressemble, et ce ne sera pas la première tâche de mise en page Android que vous ne pouvez faire qu'en XML.
Réponses:
Voici un petit code pour y parvenir:
la source
Vous invoquez
setMargins()
l'LinearLayout.LayoutParams
objet.LinearLayout.LayoutParams
est une sous-classe deLinearLayout.MarginLayoutParams
, comme indiqué dans la documentation .Non.
Vous êtes invités à fournir une preuve de cette réclamation.
Personnellement, je ne suis au courant de rien qui ne peut être accompli que via XML et non via les méthodes Java du SDK. En fait, par définition, tout doit être faisable via Java (mais pas nécessairement via des méthodes accessibles par SDK), car XML n'est pas du code exécutable. Mais, si vous êtes au courant de quelque chose, signalez-le, car c'est un bogue dans le SDK qui devrait être corrigé un jour.
la source
LayoutPararms
. En termes de styles ... oui, eh bien, il y a une raison pour laquelle je ne les utilise pas. :-)Pour ajouter des marges directement aux éléments (certains éléments permettent la modification directe des marges), vous pouvez faire:
... cela fonctionne sans avoir besoin de connaître / modifier la disposition environnante. Notez la vérification "instanceof" au cas où vous essayez de l'exécuter sur quelque chose qui ne prend pas en charge les marges.
la source
En raison de la variation des densités de pixels de l'écran de l'appareil, il est bon de toujours utiliser l'
DIP
unité pour définir la marge par programme. Comme ci-dessous_J'espère que cela vous aidera.
la source
J'ai configuré des marges directement en utilisant le code ci-dessous
La seule chose ici est de remarquer que cela
LayoutParams
devrait être importé pour le paquet suivantandroid.widget.RelativeLayout.LayoutParams
, sinon il y aura une erreur.la source
Essaye ça
la source
la source
Essaye ça:
la source
vous devez être le type de viewGroup de la vue.Dans le code ci-dessus, par exemple, je veux modifier la marge de frameLayout, et le groupe de vues de frameLayout est un RelativeLayout, vous devez donc vous convertir à (RelativeLayout.LayoutParams)
la source
Voici une solution en ligne unique:
la source