ScrollView добавляет большое пространство внизу
В моей основной деятельности есть несколько кнопок, которые помещаются друг под другом на большом экране планшета, но не на меньшем экране телефона. Я добавил ScrollView, чтобы пользователь мог прокручивать вниз до других кнопок, если этого требует размер экрана:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg"
android:gravity="center_horizontal">
<TextView
android:id="@+id/trackSelectorText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="foo" />
<!-- More buttons -->
</LinearLayout>
</ScrollView>
</LinearLayout>
Это работает, однако у меня есть большое пустое пространство под последней кнопкой (т. е. ScrollView может прокручиваться слишком далеко). Как на самом планшете, так и на эмуляторе с конфигурацией телефона. Если I center
внутренний LinearLayout (вместо center_horizontal
) пространство равномерно распределено между верхом и низом, чего я тоже не хочу. Как исправить этот макет?
Я надеюсь, что это изображение делает его более ясным, представьте, что ScrollView был полностью прокручен вниз и показывает последние кнопки. Пустое место, которое я имею в виду, находится ниже кнопки 6 на правом изображении:
4 ответа:
На самом деле, это не было связано с макетом (если только я чего-то не упустил). Я попытался прокомментировать фон, приписываемый, и это внезапно сработало. Фоновое изображение (
@drawable/bg
) было просто слишком большим и вызывало прокрутку. Я преобразовал фон в изображение с 9 патчами, чтобы его можно было масштабировать автоматически, и вуаля, дополнительное пространство исчезло. Тем не менее, если бы это было достижимо без 9-patch, мне все равно было бы интересно услышать, можно ли это сделать в XML-файле.
Попробуйте добавить этот атрибут в элемент ScrollView. android: fillViewport= "true"
<ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:fillViewport="true" > ... </ScrollVIew>
Ref: ScrollView Ref
Я проверил свой код..Отлично работают:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/bg" android:gravity="center_horizontal"> <TextView android:id="@+id/trackSelectorText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal"/> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="foo" /> <!-- More buttons --> </LinearLayout> </ScrollView> </LinearLayout>
Может быть, поможет вам.......!!