Adjust SwipeRefreshLayout height to place View at

2019-06-28 08:57发布

问题:

I have SwipeRefreshLayout inside a RelativeLayout. The problem is that SwipeRefreshLayout takes all the place on the screen, and I need to put a view after this view.

See picture: I have: 1st view, I need: 2nd view at the very bottom of the screen but with some space at a top.

My sample XML is:

<RelativeLayout 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="wrap_content"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="ru.seniorsolutions.freelansim.Orders"
    tools:showIn="@layout/app_bar_orders"
    android:paddingTop="10dp"
    android:id="@+id/layout_base">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/refreshContainer"
        android:layout_width="match_parent"
        android:layout_height="450dp"
        android:layout_marginBottom="30dp">
            <ListView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@+id/lvOffers"
                android:choiceMode="singleChoice"
                android:fastScrollEnabled="false" />
    </android.support.v4.widget.SwipeRefreshLayout>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:measureWithLargestChild="false"
        android:layout_alignParentBottom="false"
        android:layout_alignParentLeft="false"
        android:layout_alignParentStart="false"
        android:layout_alignParentEnd="true"
        android:layout_alignBottom="@+id/refreshContainer">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="prev"
            android:id="@+id/tvPrevPage"
            android:textColor="#5bb3ee"
            android:textStyle="bold" />

        <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="next"
            android:id="@+id/tvNextPage"
            android:textColor="#5bb3ee"
            android:textStyle="bold" />
    </LinearLayout>

</RelativeLayout>

回答1:

give android:layout_alignParentBottom="true" to your LinearLayout

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent"
    android:layout_alignParentBottom="true
    android:id="@+id/ll"
    .....
</LinearLayout>

and set SwipeRefreshLayout above the LinearLayout, also give its height to match_parent

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/refreshContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/ll"
    android:layout_marginBottom="30dp">