Cómo cambiar el margen de TextView

He TextView agregado programaticamente a LinearLayout y en algunos eventos externos quiero disminuir el margen inferior de que TextView a -10, para que he intentado siguiente.

LinearLayout.LayoutParams lastTxtParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lastTxtParams.setMargins(0, 0, 0, -10); mOldTextView.setLayoutParams(lastTxtParams); mOldTextView.invalidate(); 

¿Es la forma correcta de modificar Margin of widget que se ha agregado a View?
Algunos como no funciona.

  TextView forgot_pswrd = (TextView) findViewById(R.id.ForgotPasswordText); forgot_pswrd.setOnTouchListener(this); LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); llp.setMargins(50, 0, 0, 0); // llp.setMargins(left, top, right, bottom); forgot_pswrd.setLayoutParams(llp); 

Hice esto y funcionó perfectamente. Tal vez como usted está dando el valor en -ve, es por eso que su código no está funcionando. Usted acaba de poner este código donde está creando la referencia de la vista.

Su diseño en xml probablemente ya tiene un atributo layout_margin (Left | Right | etc) en él, lo que significa que usted necesita para acceder al objeto generado por ese xml y modificarlo.

He encontrado esta solución para ser muy simple:

 ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) mTextView .getLayoutParams(); mlp.setMargins(adjustmentPxs, 0, 0, 0); break; 

Obtenga la instancia de LayoutParams de su textview, reduzca a MarginLayoutParams y utilice el método setMargins para establecer los márgenes.

Este es un problema complicado, establezco el margen a textview en una fila de un diseño de tabla. Vea lo siguiente:

  TableLayout tl = new TableLayout(this); tl.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); TableRow tr = new TableRow(this); tr.setBackgroundResource(R.color.rowColor); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.setMargins(4, 4, 4, 4); TextView tv = new TextView(this); tv.setBackgroundResource(R.color.textviewColor); tv.setText("hello"); tr.addView(tv, params); TextView tv2 = new TextView(this); tv2.setBackgroundResource(R.color.textviewColor); tv2.setText("hi"); tr.addView(tv2, params); tl.addView(tr); setContentView(tl); 

La clase necesaria para importar para LayoutParams para su uso en una fila de tabla es: import android.widget. TableRow .LayoutParams;

Es importante tener en cuenta que he añadido la clase para la fila de la tabla. De manera similar muchas otras clases están disponibles para usar LayoutParams como:

Import android.widget. RelativeLayout .LayoutParams;

Import android.widget. LinearLayout .LayoutParams;

Así que utilizar en consecuencia.

Saludos,

Ahmad Shaman

SetMargins () establece los márgenes INNER de TextView, no los márgenes de diseño. ¿Es eso lo que quieres hacer? Estos dos márgenes diferentes pueden ser bastante complicados.

Si desea establecer los márgenes de diseño, cambie los LayoutParams de TextView (textview.getLayoutParams () y, a continuación, cambie los parámetros del objeto LayoutParams devuelto).

No es necesario cambiar nada en LinearLayout.

Saludos, Oliver

TextView no admite setMargins. Los documentos Android dicen:

Aunque una vista puede definir un relleno, no proporciona ningún soporte para los márgenes. Sin embargo, los grupos de visualización proporcionan este tipo de apoyo. Consulte ViewGroup y ViewGroup.MarginLayoutParams para obtener más información.

Es probable que haya cambiado el margen de diseño después de haber sido dibujado. MOldTextView.invalidate () es inútil. Necesitaba llamar a requestLayout () en el padre para retransmitir la nueva configuración. Cuando movió el código de cambio de diseño antes de que se realizara el dibujo, todo funcionó bien.

Aquí hay otro enfoque …

Cuando tengo el mismo problema, no me gustaron las soluciones sugeridas aquí. Por lo tanto, he llegado a otra forma: He insertado un TextView en el archivo XML entre los dos campos que quería separar con dos campos importantes:

  1. Visibilidad establecida en "GONE" (no ocupa ningún espacio ..)
  2. La altura se ajusta a lo que necesitaba la separación para ser.

     XML: ...//some view up here <TextView android:id="@+id/dialogSeparator" android:layout_width="match_parent" android:layout_height="30dp" android:visibility="gone"/> ...//some view down here 

Ahora, yo el código, todo lo que necesitaba para hacerlo simple cambiar la visibilidad a invisible (es decir, está ahí, y teniendo el espacio necesario, pero no se ve)

  JAVA: TextView tvSeparator = (TextView)activity.findViewById(R.id.dialogSeparator); tvSeparator.setVisibility(View.INVISIBLE); //Inside an activity extended class I can use 'this' instead of 'activity'. 

Viola … Tengo el margen necesario. BTW, Esta solución es para LinearLayout con orientación vertical, pero se puede hacer con diferentes diseños.

Espero que esto ayude.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.