studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android resize

para - manual de programacion android pdf



¿Cómo cambiar el tamaño de una vista personalizada mediante programación? (10)

Android arroja una excepción si omite pasar el alto o el ancho de un diseño. En lugar de crear un nuevo objeto LayoutParams, use el original de view, de esa forma se conservan todos los demás parámetros:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) someLayout.getLayoutParams(); params.height = 130; someLayout.setLayoutParams(params);

Estoy codificando una vista personalizada, extendida desde RelativeLayout, y quiero redimensionarla programáticamente, ¿Cómo puedo hacer?

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); }


Aquí hay una versión más genérica de la solución anterior de @herbertD:

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 mí:

ViewGroup.LayoutParams params = layout.getLayoutParams(); params.height = customHeight; layout.requestLayout();


Lo resolví de esta manera ... básicamente tengo una vista simple dentro del archivo xml.

View viewname = findViewById(R.id.prod_extra); prodExtra.getLayoutParams().height=64;


Por lo que vale, digamos que quería cambiar el tamaño de la vista en píxeles independientes del dispositivo ( dp ):

Necesita usar un método llamado applyDimension , que es un miembro de la clase TypedValue para convertir de píxeles a dps. Entonces, si quiero establecer la altura en 150dp (decir) - entonces podría hacer esto:

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150, getResources().getDisplayMetrics()); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) someLayout.getLayoutParams(); params.height = (int) pixels; someLayout.setLayoutParams(params);

donde la expresión: getResources().getDisplayMetrics() obtiene la densidad / resolución de la pantalla


Si solo tiene two or three condition(sizes) entonces puede usar @Overide onMeasure como

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); }

Y cambie su tamaño para estas condiciones en la clase CustomView fácilmente.


Utilicé esta forma para aumentar el ancho de la vista personalizada

customDrawingView.post(new Runnable() { @Override public void run() { View view_instance = customDrawingView; android.view.ViewGroup.LayoutParams params = view_instance .getLayoutParams(); int newLayoutWidth = customDrawingView .getWidth() + customDrawingView.getWidth(); params.width = newLayoutWidth; view_instance.setLayoutParams(params); screenWidthBackup = params.width; } });


prueba uno este:

... View view = inflater.inflate(R.layout.active_slide, this); view.setMinimumWidth(200);


si está anulando onMeasure , no se olvide de actualizar los nuevos tamaños

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(newWidth, newHeight); }


this.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, theSizeIWant));

¡Problema resuelto!

NOTA: asegúrese de usar los LayoutParams del Layout padre. ¡El mío es LinearLayout.LayoutParams !