Como criar duas visualizações no Android que usam 50% de altura cada, a menos que uma seja menor?

Imagine uma tela de dispositivo Android completa, quero dividi-la em duas seções:

A metade superior possui texto, que pode ser maior que o espaço disponível (ou não) e, portanto, o texto será rolado (ou seja, TextView dentro de um ScrollView)A metade inferior contém um controle MapView.

Analisando especificamente alguns cenários:

Se o texto for pequeno, quero que o mapa ocupe mais espaço, ou seja, mais de 50%. Então, talvez 20% do texto, 80% do mapa.Se o texto for maior, ele ocupa apenas um MÁXIMO de 50% do espaço da tela e depois rola. Então, mapa de 50%, texto de 50%.

No momento, atribui pesos às duas partes, e isso não é ruim, mas se o texto for pequeno, o mapa não se expandirá para ocupar espaço e o layout terá uma lacuna desperdiçada que o mapa poderia utilmente usar.

Eu tentei muitas combinações, mas não consigo ver como fazer isso acontecer. Parece ser uma experiência comum para mim que eu sei o que quero, mas não consigo ver como obter as visualizações disponíveis para fornecê-lo. Espero que haja uma maneira fácil e agradável de fazer isso.

Por favor, sinta-se livre para me fazer parecer um tolo e apontar o atributo óbvio que eu perdi :-)

==================================================== ====================

Tanto quanto eu posso ver, não há como fazer isso apenas em XML declarativo e isso precisa ser feito no código. Defino a altura da seção de texto como wrap_content, peso como 0 (sem redimensionamento) e tenho o mapa definido como peso = 1 (ou seja, ocupe o espaço restante). Depois, verifico se a seção de texto (em um ScrollView) está ocupando muito espaço e, se houver, reduzi-a novamente. Esse código precisaria ser alterado para oferecer suporte a uma orientação de layout 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();
    }
}

questionAnswers(7)

yourAnswerToTheQuestion