Android Scrollview内容大小应小于

时间:2017-09-15 11:28:31

标签: android

我想要一个" fixed_space"在屏幕的顶部和" scrollview"在屏幕的底部,应该低于fixed_space。屏幕的其余部分是一个容器" rest_space"。

不幸的是,如果内容太大/可滚动,我的scrollview的高度会更短(fixed_space有100dp)。

我尝试使用ConstraintLayout和RelativeLayout实现相同,但我得到了相同的结果。 任何想法为什么scrollview的高度都要短100dp,应该是什么?

编辑:Scrollview应该占用她需要的空间。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <View
        android:id="@+id/fixed_space"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@android:color/holo_red_dark" />

    <View
        android:id="@+id/rest_space"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@android:color/black" />

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_green_dark"
        android:fillViewport="true">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="START OF SCROLLVIEW \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMIDDLE OF SCROLLVIEW \n\n\n\n\n\n\n\n\n\n\n\nEND OF SCROLLVIEW" />

    </ScrollView>
</LinearLayout>

2 个答案:

答案 0 :(得分:0)

好的,我认为这应该可以解决你的问题:

首先,我开始使用RelativeLayout。我这样做是为了让fixed_space对齐到顶部,scrollview对齐到底部。

然后我更改了一个LinearLayout的View并在其中放置了一个TextView,这样我就可以使用wrap_content了,这是一个棘手的部分:

当您使用带有wrap_content的ScrollView和带有权重的View时,Android无法进行绘制屏幕所需的计算,因为没有引用。当我把带有wrap_content本身的TextView放在那里时会提供引用,因为Android知道文本的大小。

您不必使用TextView,但您需要任何能够为Android提供引用的内容。

在这种情况下,滚动视图将被拉伸,而不是LinearLayout。如果你希望第二个被绑定,那么我担心你需要为你的滚动视图设置一个固定的高度。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<View
    android:id="@+id/fixed_space"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:layout_alignParentTop="true"
    android:background="@android:color/holo_red_dark" />

<LinearLayout
    android:id="@+id/rest_space"
    android:layout_below="@+id/fixed_space"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/black">

    <TextView
        android:text="Test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

<ScrollView
    android:id="@+id/scrollview"
    android:layout_below="@id/rest_space"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/holo_green_dark"
    android:layout_alignParentBottom="true">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="START OF SCROLLVIEW \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMIDDLE OF SCROLLVIEW \n\n\n\n\n\n\n\n\n\n\n\nEND OF SCROLLVIEW" />

</ScrollView>
</RelativeLayout>

答案 1 :(得分:0)

试试这个:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<View
    android:id="@+id/fixed_space"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="@android:color/holo_red_dark" />


<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:id="@+id/rest_space"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/scrollview"
        android:background="@android:color/black" />

    <ScrollView
        android:id="@+id/scrollview"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_green_dark"
        android:fillViewport="true">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="START OF SCROLLVIEW \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMIDDLE OF SCROLLVIEW \n\n\n\n\n\n\n\n\n\n\n\nEND OF SCROLLVIEW" />

    </ScrollView>


</RelativeLayout>


</LinearLayout>