有可滚动底部视图的正确方法

时间:2018-01-23 21:49:31

标签: android android-layout android-scrollview

有可滚动底部视图的正确方法是什么?

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/wrnTextP1"
        android:text="Ok , batatas  "/>

    <android.support.v4.widget.Space
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_weight="1" />

    <Button
        style="@style/FullWidthButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Chega por hoje!" />
</LinearLayout>

在预览中它的looke很好,但是当我在模拟器上运行时,视图(在这种情况下:按钮)它根本不在底部。

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为你误解了ScrollView是如何被使用的。 ScrollView的LinearLayout子项具有match_parent高度...如果您的ScrollView与屏幕高度相同,且LinearLayout与ScrollView的高度相同,则没有任何内容滚动(所有内容都是屏幕的大小)。

ScrollView的直接孩子要么具有固定的高度(例如2000dp),要么使用wrap_content

如果您使用固定高度,那么您的其余代码&#34;可以使用&#34 ;;您可以使用Space元素使用layout_weight将最后一个视图向下推到LinearLayout的底部。但是,如果您正在使用wrap_content,则这是不可能的(因为layout_weight消耗的空间没有&#34;额外的#34}。

相反,你可以考虑把&#34;底部&#34;查看ScrollView外部。像这样:

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

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        ...

    </ScrollView>

    <Button
        style="@style/FullWidthButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Chega por hoje!" />

</LinearLayout>