setmargin layout_marginstart layout_marginhorizontal android margin imageview

android - layout_marginstart - Cómo establecer el margen de ImageView usando código, no xml



android layout_marginhorizontal (12)

crea el diseño dinámicamente y establece su parámetro ya que setmargin () no funcionará directamente en un imageView

ImageView im; im = (ImageView) findViewById(R.id.your_image_in_XML_by_id); RelativeLayout.LayoutParams layout = new RelativeLayout.LayoutParams(im.getLayoutParams()); layout.setMargins(counter*27, 0, 0, 0);//left,right,top,bottom im.setLayoutParams(layout); im.setImageResource(R.drawable.yourimage)

Quiero agregar un número desconocido de vistas de ImageView a mi diseño con margen. En XML, puedo usar layout_margin así:

<ImageView android:layout_margin="5dip" android:src="@drawable/image" />

Hay ImageView.setPadding() , pero no ImageView.setMargin() . Creo que es ImageView.setLayoutParams(LayoutParams) , pero no estoy seguro de qué ImageView.setLayoutParams(LayoutParams) en eso.

¿Alguien sabe?


el código de muestra está aquí, es muy fácil

LayoutParams params1 = (LayoutParams)twoLetter.getLayoutParams();//twoletter-imageview params1.height = 70; params1.setMargins(0, 210, 0, 0);//top margin -210 here twoLetter.setLayoutParams(params1);//setting layout params twoLetter.setImageResource(R.drawable.oo);


El código de Kevin crea MarginLayoutParams objeto MarginLayoutParams redundante. Versión más simple:

ImageView image = (ImageView) findViewById(R.id.main_image); RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(image.getLayoutParams()); lp.setMargins(50, 100, 0, 0); image.setLayoutParams(lp);


Para mí esto funcionó:

int imgCarMarginRightPx = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, definedValueInDp, res.getDisplayMetrics()); MarginLayoutParams lp = (MarginLayoutParams) imgCar.getLayoutParams(); lp.setMargins(0,0,imgCarMarginRightPx,0); imgCar.setLayoutParams(lp);


Puede usar este método, en caso de que desee especificar márgenes en dp:

private void addMarginsInDp(View view, int leftInDp, int topInDp, int rightInDp, int bottomInDp) { DisplayMetrics dm = view.getResources().getDisplayMetrics(); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp.setMargins(convertDpToPx(leftInDp, dm), convertDpToPx(topInDp, dm), convertDpToPx(rightInDp, dm), convertDpToPx(bottomInDp, dm)); view.setLayoutParams(lp); } private int convertDpToPx(int dp, DisplayMetrics displayMetrics) { float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics); return Math.round(pixels); }


Si desea cambiar el margen de la vista de imagen, deje intactos todos los otros márgenes.

  1. Obtenga MarginLayoutParameters de su vista de imagen en este caso: myImageView

    MarginLayoutParams marginParams = (MarginLayoutParams) myImageView.getLayoutParams();

  2. Ahora solo cambie el margen que desea cambiar, pero deje los otros tal como están:

    marginParams.setMargins(marginParams.leftMargin, marginParams.topMargin, 150, //notice only changing right margin marginParams.bottomMargin);


Si usa kotlin, esto se puede simplificar creando una función de extensión

fun View.setMarginExtensionFunction(left: Int, top: Int, right: Int, bottom: Int) { val params = layoutParams as ViewGroup.MarginLayoutParams params.setMargins(left, top, right, bottom) layoutParams = params }

Ahora todo lo que necesita es una vista, y esta función de extensión se puede usar en cualquier lugar.

val imageView = findViewById(R.id.imageView) imageView.setMarginExtensionFunction(0, 0, 0, 0)


Todos los ejemplos anteriores REEMPLAZARÁN cualquier parámetro ya presente para la Vista, que puede no ser deseado. El código siguiente simplemente extenderá los params existentes, sin reemplazarlos:

ImageView myImage = (ImageView) findViewById(R.id.image_view); MarginLayoutParams marginParams = (MarginLayoutParams) image.getLayoutParams(); marginParams.setMargins(left, top, right, bottom);


Usar un método similar a esto podría ahorrarle algunos dolores de cabeza en algunas situaciones. Si tiene dos pasadas de retoques programáticos con márgenes, es más seguro verificar si ya hay algunos parámetros de diseño establecidos. Si ya hay algunos márgenes, uno debe aumentarlos y no reemplazarlos:

public void addMargins(View v, int left, int top, int right, int bottom) { LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) v.getLayoutParams(); if (params == null) params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); int oldLeft = params.leftMargin; int oldTop = params.topMargin; int oldRight = params.rightMargin; int oldBottom = params.bottomMargin; params.setMargins(oldLeft + left, oldTop + top, oldRight + right, oldBottom + bottom); v.setLayoutParams(params); }


Yo uso simplemente esto y funciona muy bien:

ImageView imageView = (ImageView) findViewById(R.id.image_id); RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) imageView.getLayoutParams(); layoutParams.setMargins(left, top, right, bottom); imageView.setLayoutParams(layoutParams);

La unidad setMargins () es pixel no dp. Si desea establecer el margen en dp, solo dentro de su archivo values ​​/ dimens.xml cree sus dimensiones como:

<resources> <dimen name="right">16dp</dimen> <dimen name="left">16dp</dimen> </resources>

y acceso como:

getResources().getDimension(R.dimen.right);


android.view.ViewGroup.MarginLayoutParams tiene un método setMargins(left, top, right, bottom) . Las subclases directas son: FrameLayout.LayoutParams , LinearLayout.LayoutParams y RelativeLayout.LayoutParams .

Usando, por ejemplo, LinearLayout :

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lp.setMargins(left, top, right, bottom); imageView.setLayoutParams(lp);

MarginLayoutParams

Esto establece los márgenes en píxeles. Para escalar, usa

context.getResources().getDisplayMetrics().density

DisplayMetrics


image = (ImageView) findViewById(R.id.imageID); MarginLayoutParams marginParams = new MarginLayoutParams(image.getLayoutParams()); marginParams.setMargins(left_margin, top_margin, right_margin, bottom_margin); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams); image.setLayoutParams(layoutParams);