¿Se puede cambiar este atributo dinámicamente en código Java?
android:layout_marginRight
Tengo un TextView
, que tiene que cambiar su posición dinámicamente algunos píxeles a la izquierda.
¿Cómo hacerlo programáticamente?
EDITAR: Una forma más genérica de hacer esto que no depende del tipo de diseño (aparte de eso es un tipo de diseño que admite márgenes):
public static void setMargins (View v, int l, int t, int r, int b) {
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(l, t, r, b);
v.requestLayout();
}
}
Debe consultar los documentos para TextView . Básicamente, querrás obtener el objeto LayoutParams de TextView, modificar los márgenes y luego volver a configurarlo en TextView. Suponiendo que está en un diseño lineal, intente algo como esto:
TextView tv = (TextView)findViewById(R.id.my_text_view);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams();
params.setMargins(0, 0, 10, 0); //substitute parameters for left, top, right, bottom
tv.setLayoutParams(params);
No puedo probarlo en este momento, por lo que mi lanzamiento puede estar un poco apagado, pero los LayoutParams son los que deben modificarse para cambiar el margen.
No olvide que si su TextView está dentro, por ejemplo, un RelativeLayout , uno debería usar RelativeLayout.LayoutParams en lugar de LinearLayout.LayoutParams
Use LayoutParams (como ya se explicó). Sin embargo, tenga cuidado con qué LayoutParams elegir. De acuerdo con https://stackoverflow.com/a/11971553/3184778 "debe usar el que se relaciona con el PADRE de la vista en la que está trabajando, no con la vista real"
Si, por ejemplo, TextView está dentro de un TableRow, debe usar TableRow.LayoutParams en lugar de RelativeLayout o LinearLayout
fuente
Use esta función para configurar todo tipo de márgenes
fuente
Actualización: Android KTX
El módulo Core KTX proporciona extensiones para bibliotecas comunes que forman parte del marco de Android,
androidx.core.view
entre ellas.Las siguientes funciones de extensión son útiles para manejar los márgenes:
setMargins()
función de extensión:Establece los márgenes de todos los ejes en la
ViewGroup
'sMarginLayoutParams
. (La dimensión debe proporcionarse en píxeles, consulte la última sección si desea trabajar con dp)updateMargins()
función de extensión:Actualiza los márgenes en el
ViewGroup
'sViewGroup.MarginLayoutParams
.updateMarginsRelative()
función de extensión:Actualiza los márgenes relativos en los
ViewGroup
'sMarginLayoutParams
(inicio / final en lugar de izquierda / derecha).Las siguientes propiedades de extensión son útiles para obtener los márgenes actuales:
dp
lugar depx
:Si desea trabajar con
dp
(píxeles independientes de la densidad) en lugar depx
, primero deberá convertirlos. Puede hacerlo fácilmente con la siguiente propiedad de extensión:Luego puede llamar a las funciones de extensión anteriores como:
Vieja respuesta:
En Kotlin puede declarar una función de extensión como:
Entonces puedes llamarlo así:
O:
fuente