Capture Layout resize before API 11
Estoy dinámicamente creando una tabla, hecha de vistas que se establecen dinámicamente en un diseño relativo. En mi onCreate llamo al constructor de mi clase Board que crea todo:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); RelativeLayout boardLayout = (RelativeLayout) findViewById(R.id.layoutBoard); board = new Board(this, boardLayout); }
En mi clase Board establezco las reglas para la capa y también necesito establecer el tamaño de las vistas que boardLayout.getWidth()
, y las calculo a partir de los valores de boardLayout.getWidth()
y boardLayout.getHeight()
- Android: establecer la altura mínima de una vista mediante programación
- Asignar un ID de vista programáticamente en Android
- Fragment_main y activity_main en Android Studio
- Diseño de la charla de burbujas
- Android: StackOverFlowError con InvocationTargetException al inflar el diseño
Ahora el problema es que todo el dibujo real en la pantalla se realiza sólo después del final del método onCreate, por lo que en el momento de la creación, el ancho y la altura de la capa son cero.
Así que decidí establecer el tamaño con:
boardLayout.addOnLayoutChangeListener(new RelativeLayout.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { board.setParentLayoutSize(left, top, right, bottom); } });
Desafortunadamente este método está disponible solamente de API 11 y debo pegarme a API 10 como máximo. ¿Cómo podría realizar esto? ¿Hay una manera de escuchar los cambios de diseño sin usar este método?
¡Gracias!
- SwipeRefreshLayout detecta un evento de desplaza hacia abajo antes de iniciar onRefresh ()
- ¿Diferencia entre la disposición grande y la tierra para las tabletas?
- Combinación de pestañas de deslizamiento con un encabezado pegajoso
- Cómo calcular la relación de píxeles del dispositivo
- Cómo corregir la posición de una vista dentro de un ViewPager y CoordinatorLayout
- ¿Por qué mi diseño se redibuja completamente cuando invalido una de sus vistas?
- Reciclador vista de la lista de desplazamiento vertical con fila horizontal desplazable
- Cómo crear personalizado spinner como borde alrededor de la ruleta con triángulo hacia abajo en el lado derecho?
La solución más elegante es extender la clase RelativeLayout, entonces solo puedes anular onSizeChanged:
protected void onSizeChanged (int w, int h, int oldw, int oldh)
Si necesita conocer el tamaño justo después de inflar puede intentar medir la vista manualmente: así que mide la llamada (…) que el diseño (…) y entonces getMeasuredWidth () / getMeasuredHeight debe devolver el tamaño correcto. Pero esto es más complicado, no lo use si no está seguro de cómo funciona.
Después de horas que no pude encontrar nada, escribí este mensaje e inmediatamente descubrí esto: ¿Cómo recuperar las dimensiones de una vista?