Не позволяйте ScrollView занимать слишком большую высоту - PullRequest
4 голосов
/ 30 декабря 2011

Я стараюсь, чтобы ScrollView не занимал слишком много места в нижней части экрана, поскольку он не отображает мои две кнопки. Я также не хочу вручную устанавливать высоту для ScrollView.

<LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical">
   <LinearLayout
      ...
      android:orientation="horizontal">
        <Button .../>
        <TextView .../>
        <Button .../>
   </LinearLayout>
   <ScrollView
      android:layout_width="math_parent"
      android:layout_height="wrap_content">
      <ImageView .../>
      <ImageView .../>
      <ImageView .../>
   </ScrollView>
   <LinearLayout
      ...
      android:orientation="horizontal">
        <Button .../>
        <Button .../>
   </LinearLayout>
</LinearLayout>

Это обобщенная версия моего макета. Что происходит, так это то, что ScrollView распространяется до нижней части экрана, независимо от того, сколько элементов в нем. Это делает две кнопки внизу экрана невидимыми.

Как я могу предотвратить это, не устанавливая высоту для ScrollView вручную?

Я использовал android:layout_height="wrap_content" для всех моих просмотров.

Разве это не должно автоматически распределять высоту видов по высоте экрана?

(Хотел включить изображения, но мой представитель еще недостаточно высок (- _ -))

Ответы [ 2 ]

2 голосов
/ 20 июня 2013

Я бы решил эту проблему сегодня, используя RelativeLayout в качестве базы. Прикрепите два LinearLayout к верху и низу RelLayout соответственно. Затем я вставил бы ScrollView, но обязательно установил бы его свойства макета следующим образом:

android:layout_below="topLinearLayout" android:layout_above="bottomLinearLayout"

2 голосов
/ 04 декабря 2012

Вы пытались использовать layout_weight для ScrollView.IIRC, если ненулевой вес установлен для ОДНОГО элемента (и соответствующее измерение установлено в 0dp), то он заполнит оставшееся пространство в этом измерении после установки измерений для одноуровневых видов (в данном случае, LinearLayout сверху и снизу ScrollView.

Извинения, не удалось проверить среду Android, и прошло какое-то время.

<LinearLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical">

   <LinearLayout>
      ...
      Something at the top
      ...
   </LinearLayout>

   <ScrollView
      android:layout_width="match_parent"
      **android:layout_height="0dp"
      android:layout_weight="1"**>
      <ImageView .../>
      <ImageView .../>
      <ImageView .../>
   </ScrollView>

   <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal" >
      ...
      buttons
      ...
   </LinearLayout>
</LinearLayout>

Вот ответ с дополнительной информацией об атрибуте layout_weight.

...