SwipeRefreshLayout с NestedScrollView и LinearLayout

<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="match_parent"
    android:layout_height="match_parent">

    <!--<include-->
    <!--android:id="@+id/app_bar"-->
    <!--layout="@layout/app_bar" />-->


    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/rootLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/app_bar">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="256dp">

            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsingToolbarLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:contentScrim="?attr/colorPrimary"
                app:expandedTitleMarginStart="64dp"
                app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:scaleType="centerCrop"
                    android:src="@drawable/header"
                    app:layout_collapseMode="parallax"
                    app:layout_collapseParallaxMultiplier="0.7" />

                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbarTutorial"
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:minHeight="?attr/actionBarSize"
                    app:layout_collapseMode="pin"
                    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

                <TextView
                    android:id="@+id/textViewAppBar"
                    android:layout_width="match_parent"
                    android:layout_height="50dp"
                    android:layout_gravity="bottom"
                    android:gravity="center"
                    android:scrollbarDefaultDelayBeforeFade="@id/toolbarTutorial"
                    android:text="test"
                    android:textColor="@color/white"
                    android:textSize="30sp" />


            </android.support.design.widget.CollapsingToolbarLayout>

            <!--<android.support.design.widget.TabLayout-->
            <!--android:id="@+id/tabLayout"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="wrap_content"-->
            <!--app:layout_scrollFlags="scroll|enterAlways"/>-->

        </android.support.design.widget.AppBarLayout>


        <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/swipe_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.v4.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fillViewport="true"
                app:layout_behavior="@string/appbar_scrolling_view_behavior">


                <!--<android.support.v4.widget.SwipeRefreshLayout-->
                <!--android:id="@+id/activity_main_swipe_refresh_layout"-->
                <!--android:layout_width="match_parent"-->
                <!--android:layout_height="wrap_content">-->
                <LinearLayout
                    android:id="@+id/linearLayoutWithData"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical"
                    app:layout_behavior="@string/appbar_scrolling_view_behavior">

                    <!--<TextView-->
                    <!--android:id="@+id/textViewInternet"-->
                    <!--android:layout_width="match_parent"-->
                    <!--android:layout_height="wrap_content"-->
                    <!--android:textColor="@color/black"/>-->


                </LinearLayout>
                <!--</android.support.v4.widget.SwipeRefreshLayout>-->
            </android.support.v4.widget.NestedScrollView>
        </android.support.v4.widget.SwipeRefreshLayout>

        <android.support.design.widget.FloatingActionButton
            android:id="@+id/btnFAB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|right"
            android:layout_marginBottom="@dimen/codelab_fab_margin_bottom"
            android:layout_marginRight="@dimen/codelab_fab_margin_right"
            android:src="@drawable/ic_plus_blue"
            app:fabSize="normal">

        </android.support.design.widget.FloatingActionButton>

    </android.support.design.widget.CoordinatorLayout>
</RelativeLayout>

Я хотел бы, чтобы линейный макет с данными находился ниже «textViewAppBar». Я пытался реализовать RelativeLayout, но он не работает. Теперь данные отображаются в полном макете, но я хотел бы, чтобы это было ниже «textViewAppBar», но SwipeRefreshLayout должен быть match_parent, какие-либо предложения? Спасибо :-)


person FabASP    schedule 29.08.2015    source источник


Ответы (5)


app:layout_behavior следует добавить к прямому потомку CoordinatorLayout.

Таким образом, вы должны переместить app:layout_behavior="@string/appbar_scrolling_view_behavior" с NestedScrollView на SwipeRefreshLayout.

<android.support.design.widget.CoordinatorLayout ...>

    <android.support.design.widget.AppBarLayout  ...>
        ...
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.SwipeRefreshLayout 
        android:id="@+id/swipe_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true">
            ...
        </android.support.v4.widget.NestedScrollView>

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

</android.support.design.widget.CoordinatorLayout>
person leveme    schedule 01.09.2016

app:layout_behavior следует добавить к прямому дочернему элементу CoordinatorLayout. и после того, как вам нужно использовать NestedScrollView в SwipeLayout, например;

<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">
        ...
    </android.support.v4.widget.NestedScrollView>

</android.support.v4.widget.SwipeRefreshLayout>
person Ozan Urkan    schedule 29.01.2018

использовать это

<android.support.v4.widget.SwipeRefreshLayout 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/swipeContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.CoordinatorLayout
    ... your attribute here ... >

    <android.support.design.widget.AppBarLayout
        ... your attribute here ... >

        <android.support.design.widget.CollapsingToolbarLayout
            ... your attribute here ... >

            ... your element here ...

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        ... your attribute here ... >

        ... your element here ...

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

person raditya gumay    schedule 26.04.2016
comment
при этом складной макет не работает.. значит, он не складывается - person GvSharma; 10.01.2018

Я решил сам поставить SwipeRefreshLayout в качестве основного макета, а остальные добавить в качестве дочерних.

person FabASP    schedule 29.08.2015
comment
можете поделиться фрагментом может быть? какой основной макет? - person Rahul Patil; 16.10.2015
comment
@RahulPatil взгляните на мой ответ ниже - person raditya gumay; 26.04.2016

Вам нужно добавить в свой код:

        recyclerView.setNestedScrollingEnabled(false)
person Tony    schedule 09.03.2019
comment
Куда добавить? - person Nino Filiu; 09.03.2019
comment
@NinoFiliu, когда вы запускаете recyclerView - person Tony; 09.03.2019