web-dev-qa-db-fra.com

Comment définir dynamiquement la marge dans Android?

Je fais actuellement une Android qui contient une boîte de dialogue d'alerte personnalisée. Elle contient un bouton, mais je ne peux pas définir la marge pour le bouton. Le code est donné ci-dessous. La méthode setmargin ne fonctionne pas

AlertDialog.Builder myDialog = new AlertDialog.Builder(Login.this);
Button button = new Button(Login.this);

button.setText("Send");
LayoutParams buttonLayoutParams 
    = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

button.setLayoutParams(buttonLayoutParams);

resetPassword=editText.getText().toString();

LinearLayout layout = new LinearLayout(Login.this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(textView);
layout.addView(editText);
layout.addView(button);

myDialog.setView(layout);
29
user1057197

Écrivez le code suivant pour définir la marge, cela peut vous aider.

AlertDialog.Builder myDialog = new AlertDialog.Builder(Login.this);
Button button = new Button(Login.this);
EditText editText = new EditText(Login.this);
TextView textView = new TextView(Login.this);
button.setText("Send");
LinearLayout.LayoutParams buttonLayoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
buttonLayoutParams.setMargins(50, 10, 0, 0);
button.setLayoutParams(buttonLayoutParams);
String resetPassword = editText.getText().toString();
LinearLayout layout = new LinearLayout(Login.this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(textView);
layout.addView(editText);
layout.addView(button);
myDialog.setView(layout);
myDialog.show();

Utilisation LinearLayout.LayoutParams ou RelativeLayout.LayoutParams selon la disposition parent de la vue enfant

57
Dipak Keshariya
buttonLayoutParams.bottomMargin
buttonLayoutParams.topMargin
buttonLayoutParams.leftMargin
buttonLayoutParams.rightMargin

peut être utilisé pour définir des marges

3
user1458071

La méthode setMargin () est disponible si vous utilisez LinearLayout.LayoutParams mais pas si vous utilisez ViewGroup.LayoutParams. Dipak Keshariya y fait allusion mais ne le dit pas en tant de mots.

2
Klepto
You can set in LinearLayout margin

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams layoutParams = new
LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(30, 20, 30, 0);
Button okButton=new Button(this);
okButton.setText("some text");
ll.addView(okButton, layoutParams);
1
Ajay Keshri

Je partage juste une approche légèrement différente.

Au lieu de caster vers LinearLayout.LayoutParams, RelativeLayout.LayoutParams, etc., vous pouvez simplement transtyper en MarginLayoutParams.

La conversion en MarginLayoutParams est meilleure car vous pouvez mettre à jour votre mise en page ultérieurement et vous n'avez pas besoin de revenir à votre Java pour passer de LinearLayout à RelativeLayout ou tout autre type de mise en page

Vous pouvez faire quelque chose comme:

MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams();

// Set bottom margin
layoutParams.bottomMargin = x;

// Set top margin
layoutParams.topMargin = x;

// Set left margin
// This won't have effect if you set any relative margin (start) previously or in the layout.xml
layoutParams.leftMargin = x;

// Set left margin
// This won't have effect if you set any relative margin (end) previously or in the layout.xml
layoutParams.rightMargin = x;

// Set start margin
layoutParams.setMarginStart(x);

// Set end margin
layoutParams.setMarginStart(x);

// Set all left, top, right, bottom margins at once
// Note that here, left and right margins are set (not start/end).
// So, if you have used start/end margin before (or via layout.xml), 
// setting left/right here won't have any effect.
layoutParams.setMargins(left, top, end, bottom)

// Then re-apply the layout params again to force the view to be re-draw
// This step may not be necessary because depending where you set the margin, 
// view is already scheduled to be drawn
// For any case, to ensure the view will apply the new margin, call:
view.setLayoutParams(layoutParams);
0
W0rmH0le