【问题标题】:NestedScrollView setting height to space in between two layoutsNestedScrollView 将高度设置为两个布局之间的空间
【发布时间】:2018-01-04 07:20:55
【问题描述】:

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

<?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="$0"
            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                                $0"
                    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                                         $2"
                    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                             $5"
                    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                        $20"
                    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                           $70"
                    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                          $140"
                    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                  $200"
                    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

【问题讨论】:

  • 你能显示你想要的图像吗?
  • 你想让“btnBack”在 NestedScrollView 上方吗??
  • 添加了我希望它看起来像的图像,只需要它不要将后退按钮推离页面,因此适合顶部的统计信息和按钮上的后退按钮(动态)

标签: android android-layout height android-nestedscrollview nestedscrollview


【解决方案1】:
  • 将您的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="$0"
            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                                $0"
                    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                                         $2"
                    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                             $5"
                    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                        $20"
                    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                           $70"
                    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                          $140"
                    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                  $200"
                    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>

【讨论】:

    【解决方案2】:

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

    【讨论】: