NestedScrollView 将两个布局之间的高度设置为 space

NestedScrollView setting height to space in between two layouts

我试图将后退按钮保留在页面底部,并让嵌套滚动视图填充统计相关布局下方的 space 和页面底部的后退按钮。它目前适合顶部的统计信息,但由于它适合页面,所以将后退按钮推离页面底部。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.swapsy.jack.broketoballing.FoodActivity"
    android:orientation="vertical"
    android:id="@+id/linWholePage">

    <RelativeLayout
        android:id="@+id/statsTop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="14dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:background="@drawable/textbackground"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="5dp"
        android:paddingBottom="5dp">

        <ImageView
            android:id="@+id/imgFood"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_food"
            android:layout_marginTop="5dp"
            android:layout_marginStart="5dp" android:contentDescription="@string/todo" />

        <TextView
            android:id="@+id/txtFood"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/imgFood"
            android:layout_marginStart="16dp"
            android:layout_toEndOf="@+id/imgFood"
            android:text="@string/_300_300"
            android:textSize="17sp"
            android:textStyle="bold"
            android:layout_marginTop="5dp"/>

        <ProgressBar
            android:id="@+id/foodBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="220dp"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/txtFood"
            android:layout_marginStart="11dp"
            android:layout_toEndOf="@+id/txtFood"
            android:layout_marginTop="3dp"
            android:background="@drawable/foodbaroutline"
            android:max="300"
            android:progress="150"
            android:progressDrawable="@drawable/foodprogressdrawable"
            android:padding="2dp"/>

        <ImageView
            android:id="@+id/imgHealth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/imgFood"
            android:layout_below="@+id/imgFood"
            android:src="@drawable/ic_health"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp" android:contentDescription="@string/todo" />

        <TextView
            android:id="@+id/txtHealth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/txtFood"
            android:layout_alignTop="@+id/imgHealth"
            android:text="@string/_300_300"
            android:textSize="17sp"
            android:textStyle="bold"
            android:layout_marginTop="5dp"/>

        <ProgressBar
            android:id="@+id/healthBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="220dp"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/foodBar"
            android:layout_alignTop="@+id/txtHealth"
            android:layout_marginTop="3dp"
            android:background="@drawable/healthbaroutline"
            android:max="300"
            android:progress="300"
            android:progressDrawable="@drawable/healthprogressdrawable"
            android:padding="2dp"/>

        <ImageView
            android:id="@+id/imgClock"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/imgHealth"
            android:layout_below="@+id/imgHealth"
            android:contentDescription="@string/todo"
            android:paddingTop="7dp"
            android:src="@drawable/ic_clock" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/imgClock"
            android:layout_marginStart="13dp"
            android:layout_toEndOf="@+id/imgClock"
            android:text="@string/timestring"
            android:textStyle="bold"
            android:textSize="17sp"
            android:layout_marginTop="12dp"
            android:id="@+id/txtTime" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/imgClock"
            android:layout_below="@+id/imgClock"
            android:src="@drawable/ic_money"
            android:layout_marginTop="7dp"
            android:id="@+id/imgMoney" android:contentDescription="@string/todo" />

        <TextView
            android:id="@+id/txtMoney"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/imgMoney"
            android:layout_alignStart="@+id/txtTime"
            android:text="@string/_0"
            android:textSize="17sp"
            android:layout_marginBottom="5dp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/imgBank"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/imgMoney"
            android:layout_below="@+id/imgMoney"
            android:layout_marginTop="11dp"
            android:src="@drawable/ic_bank" />

        <TextView
            android:id="@+id/txtBankBal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/txtMoney"
            android:layout_alignTop="@+id/imgBank"
            android:text="[=11=]"
            android:textSize="17sp"
            android:textStyle="bold"
            android:layout_marginTop="5dp"/>

    </RelativeLayout>

    <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/imgBank"
        android:layout_marginTop="2dp"
        android:layout_marginBottom="3dp"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544/5224354917"
        android:visibility="visible"
        />


        <android.support.v4.widget.NestedScrollView
            android:id="@+id/scrFood"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

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

                <Button
                    android:id="@+id/btnEatRubbish"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat out of a bin                                [=11=]"
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatBeans"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat Beans                                         "
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatSliceOfCake"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat Slice of Cake                             "
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatCheeseBurger"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat Cheese Burger                        "
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatOrganicMeal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat Organic Meal                           "
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatRestaurant"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat at Restaurant                          0"
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatUltimateMeal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat an Ultimate Meal                  0"
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

            </LinearLayout>

        </android.support.v4.widget.NestedScrollView>


    <RelativeLayout
        android:id="@+id/relBack"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center|bottom">

        <Button
            android:id="@+id/btnBack"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="5dp"
            android:text="@string/back"
            android:textAllCaps="false"
            android:textSize="20sp"
            android:textStyle="normal" />

    </RelativeLayout>


</LinearLayout>

我希望它看起来像这样...

The look I want

  • 将您的 nestedScrollView 包含在线性布局中,参数为

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

  • 将后退按钮的父级更改为线性布局而不是相对布局,并将其高度参数更改为 wrap_content

代码是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/linWholePage"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.swapsy.jack.broketoballing.FoodActivity">

    <RelativeLayout
        android:id="@+id/statsTop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="14dp"
        android:background="@drawable/textbackground"
        android:paddingBottom="5dp">

        <ImageView
            android:id="@+id/imgFood"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="5dp"
            android:layout_marginTop="5dp"
            android:contentDescription="@string/todo"
            android:src="@drawable/ic_food" />

        <TextView
            android:id="@+id/txtFood"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/imgFood"
            android:layout_marginStart="16dp"
            android:layout_marginTop="5dp"
            android:layout_toEndOf="@+id/imgFood"
            android:text="@string/_300_300"
            android:textSize="17sp"
            android:textStyle="bold" />

        <ProgressBar
            android:id="@+id/foodBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="220dp"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/txtFood"
            android:layout_marginStart="11dp"
            android:layout_marginTop="3dp"
            android:layout_toEndOf="@+id/txtFood"
            android:background="@drawable/foodbaroutline"
            android:max="300"
            android:padding="2dp"
            android:progress="150"
            android:progressDrawable="@drawable/foodprogressdrawable" />

        <ImageView
            android:id="@+id/imgHealth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/imgFood"
            android:layout_below="@+id/imgFood"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="5dp"
            android:contentDescription="@string/todo"
            android:src="@drawable/ic_health" />

        <TextView
            android:id="@+id/txtHealth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/txtFood"
            android:layout_alignTop="@+id/imgHealth"
            android:layout_marginTop="5dp"
            android:text="@string/_300_300"
            android:textSize="17sp"
            android:textStyle="bold" />

        <ProgressBar
            android:id="@+id/healthBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="220dp"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/foodBar"
            android:layout_alignTop="@+id/txtHealth"
            android:layout_marginTop="3dp"
            android:background="@drawable/healthbaroutline"
            android:max="300"
            android:padding="2dp"
            android:progress="300"
            android:progressDrawable="@drawable/healthprogressdrawable" />

        <ImageView
            android:id="@+id/imgClock"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/imgHealth"
            android:layout_below="@+id/imgHealth"
            android:contentDescription="@string/todo"
            android:paddingTop="7dp"
            android:src="@drawable/ic_clock" />

        <TextView
            android:id="@+id/txtTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/imgClock"
            android:layout_marginStart="13dp"
            android:layout_marginTop="12dp"
            android:layout_toEndOf="@+id/imgClock"
            android:text="@string/timestring"
            android:textSize="17sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/imgMoney"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/imgClock"
            android:layout_below="@+id/imgClock"
            android:layout_marginTop="7dp"
            android:contentDescription="@string/todo"
            android:src="@drawable/ic_money" />

        <TextView
            android:id="@+id/txtMoney"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/imgMoney"
            android:layout_alignStart="@+id/txtTime"
            android:layout_marginBottom="5dp"
            android:text="@string/_0"
            android:textSize="17sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/imgBank"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/imgMoney"
            android:layout_below="@+id/imgMoney"
            android:layout_marginTop="11dp"
            android:src="@drawable/ic_bank" />

        <TextView
            android:id="@+id/txtBankBal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignStart="@+id/txtMoney"
            android:layout_alignTop="@+id/imgBank"
            android:layout_marginTop="5dp"
            android:text="[=10=]"
            android:textSize="17sp"
            android:textStyle="bold" />

    </RelativeLayout>

    <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"

        android:layout_marginBottom="3dp"
        android:layout_marginTop="2dp"
        android:visibility="visible"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="ca-app-pub-3940256099942544/5224354917" />

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

        <android.support.v4.widget.NestedScrollView
            android:id="@+id/scrFood"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

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

                <Button
                    android:id="@+id/btnEatRubbish"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat out of a bin                                [=10=]"
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatBeans"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat Beans                                         "
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatSliceOfCake"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat Slice of Cake                             "
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatCheeseBurger"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat Cheese Burger                        "
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatOrganicMeal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat Organic Meal                           "
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatRestaurant"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat at Restaurant                          0"
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

                <Button
                    android:id="@+id/btnEatUltimateMeal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Eat an Ultimate Meal                  0"
                    android:textAllCaps="false"
                    android:textSize="20sp"
                    android:textStyle="normal" />

            </LinearLayout>

        </android.support.v4.widget.NestedScrollView>
    </LinearLayout>


    <LinearLayout
        android:id="@+id/relBack"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center|bottom">

        <Button
            android:id="@+id/btnBack"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:layout_marginBottom="5dp"
            android:text="@string/back"
            android:textAllCaps="false"
            android:textSize="20sp"
            android:textStyle="normal" />

    </LinearLayout>
</LinearLayout>

永远记住 XML 代码是从顶部到底部解析的,你的相对布局没有被正确渲染,因为你把它放在了最后,所以只要把它放在你的嵌套滚动视图上方和嵌套中滚动视图刚刚设置 layout_above @id of backbtn 布局,如果您需要代码,请告诉我,但我建议您自己尝试:)