imaginar una pantalla completa dispositivo Android, lo quiero dividida en dos secciones:¿Cómo crear dos vistas en Android que usan 50% de altura cada una, a menos que una sea más pequeña?
- La mitad superior tiene texto en él, que puede ser mayor que el espacio disponible (o no) y por lo que el texto se desplazará (es decir, TextView dentro de un ScrollView)
- La mitad inferior contiene un control MapView.
Mirando específicamente a algunos escenarios:
- Si el texto es pequeño, quiero el mapa para ocupar más espacio, es decir, más del 50%. Entonces quizás un 20% de texto, un 80% de mapa.
- Si el texto es más grande, solo ocupará un MÁXIMO del 50% del espacio de la pantalla y luego se desplazará. Entonces 50% mapa, 50% texto.
Por el momento he asignado pesos a las dos partes, y eso no es tan malo, pero si el texto es pequeño, el mapa no se expande para tomar el espacio, y el diseño tiene una brecha desaprovechada que el mapa podría usar de manera útil.
He intentado muchas combinaciones, pero no puedo ver cómo hacer que esto suceda. Parece ser una experiencia común para mí saber lo que quiero, pero no puedo ver cómo obtener las vistas disponibles para entregarlo. Espero que haya una buena manera fácil de hacer esto.
dude en hacerme quedar como un tonto y señalar el atributo obvio que me he perdido :-)
=================== =============================================== =
Por lo que puedo ver, no hay forma de hacer esto solo en XML declarativo y necesita hacerlo en el código. Establecí la altura de la sección de texto en wrap_content, weight en 0 (sin cambio de tamaño), y tengo el mapa establecido en weight = 1 (es decir, ocupa el espacio restante). Luego compruebo si la sección de texto (en una Vista de desplazamiento) está ocupando demasiado espacio y, de ser así, lo reduzco. Este código debería cambiar para admitir una orientación de diseño diferente.
private void fixLayoutProportions()
{
float maxPercentageOfScreenForText = 50/100;
LinearLayout container = (LinearLayout)findViewById(R.id.container);
ScrollView eventText = (ScrollView)findViewById(R.id.text_scroller);
int heightAvailable = container.getHeight();
int scrollerHeight = eventText.getHeight();
if (scrollerHeight>(heightAvailable*maxPercentageOfScreenForText)) // Text section using too much space
{
eventText.getLayoutParams().height = (int)(heightAvailable*maxPercentageOfScreenForText) ;
eventText.invalidate();
}
}
Traté de hacer esto también y finalmente dejé de hacerlo de una manera muy inteligente, mi solución fue configurar la altura máxima de desplazamiento vertical utilizando inmersiones en la mitad de la pantalla, mediante el uso sumerge lo ajusta lo mejor posible. Por supuesto, necesita un diseño para el retrato y otro para el paisaje. Dejé esto como un comentario, ya que realmente no es tan bueno de una solución. – blindstuff