Представьте себе полный экран устройства Android, я хочу, чтобы он был разделен на две части:
- Верхняя половина содержит текст, который может быть больше доступного (или нет) пространства и т. Д.текст будет прокручиваться (т. е. TextView внутри ScrollView)
- Нижняя половина содержит элемент управления MapView.
В частности, в некоторых сценариях:
- Еслитекст маленький, я хочу, чтобы карта занимала больше места, то есть более 50%.Так что, возможно, 20% текста, 80% карты.
- Если текст больше, он занимает максимум 50% пространства экрана, а затем прокручивается.Итак, карта 50%, текст 50%.
На данный момент я назначил веса двум частям, и это не так уж и плохо, но если текст маленький, карта не 'Я не могу развернуться, чтобы занять место, и макет имеет потерянный пробел, который карта могла бы с пользой использовать.
Я пробовал множество комбинаций, но не вижу, как это сделать.Мне кажется, что я знаю, чего хочу, но не понимаю, как получить доступные представления для его доставки.Я надеюсь, что есть хороший простой способ сделать это.
Пожалуйста, не стесняйтесь, чтобы я выглядел как дурак и указал на очевидный атрибут, который я пропустил: -)
======================================================================
Насколько я понимаю, нет способа сделать это только в декларативном XML, и это нужно делать в коде.Я установил для высоты текстовой секции значение wrap_content, для веса - 0 (без изменения размера), а для карты - вес = 1 (т. Е. Занимаю оставшееся пространство).Затем я проверяю, занимает ли текстовая часть (в ScrollView) слишком много места, и если это так, сокращаю ее обратно.Этот код нужно будет изменить, чтобы поддерживать другую ориентацию макета.
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();
}
}