Estoy codificando una vista personalizada, extendida desde RelativeLayout, y quiero cambiar su tamaño programáticamente. ¿Cómo puedo hacerlo?
la clase de vista personalizada es algo así como:
public ActiveSlideView(Context context, AttributeSet attr){
super(context, attr);
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(inflater != null){
inflater.inflate(R.layout.active_slide, this);
}
¡Problema resuelto!
NOTA: asegúrese de utilizar el diseño principal
LayoutParams
. El mío esLinearLayout.LayoutParams
!fuente
RelativeLayout.LayoutParams?
private void resizeView(View view, int newWidth, int newHeight) { try { Constructor<? extends LayoutParams> ctor = view.getLayoutParams().getClass().getDeclaredConstructor(int.class, int.class); view.setLayoutParams(ctor.newInstance(newWidth, newHeight)); } catch (Exception e) { e.printStackTrace(); } }
Esto funciona para mi:
fuente
Por lo que vale, digamos que desea cambiar el tamaño de la vista en píxeles independientes del dispositivo ( dp ): -
Debe usar un método llamado
applyDimension
, que es miembro de la claseTypedValue
para convertir de píxeles a dps. Entonces, si quiero establecer la altura en 150dp (por ejemplo), entonces podría hacer esto:donde la expresión:
getResources().getDisplayMetrics()
obtiene la densidad / resolución de la pantallafuente
float pixels = context.getResources().getDimensionPixelSize(R.dimen.card_height);
En Kotlin, puede usar las extensiones ktx :
fuente
prueba este:
fuente
Aquí hay una versión más genérica de la solución anterior de @herbertD:
fuente
Utilicé esta manera para aumentar el ancho de la vista personalizada
fuente
Lo resolví de esta manera ... Básicamente tengo una vista simple dentro del archivo xml.
fuente
https://stackoverflow.com/q/44259342/6596724
Si solo
two or three condition(sizes)
tienes, puedes usar @OverideonMeasure
comofuente
si está anulando
onMeasure
, no olvide actualizar los nuevos tamañosfuente
Así es como lo logré. En la respuesta de Sileria , hizo lo siguiente:
Esto es correcto, pero espera que demos la altura
pixels
, pero quería dardp
la altura que quiero, así que agregué:Entonces se verá así:
fuente
Esto es lo que hice:
Si hay un grupo de vistas al que pertenece esta vista, es posible que también deba llamar a yourViewGroup.requestLayout () para que surta efecto.
fuente