在活动开始时布局跳转到RecyclerView的顶部

时间:2016-07-25 13:04:58

标签: android layout android-recyclerview

当活动打开时,它会显示RecyclerView布局的顶部,而不是活动布局的顶部。

活动布局.xml文件:

    <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:paddingBottom="20dp"
                android:paddingTop="20dp">

            ...
            <RelativeLayout/>
            <View />
            <LinearLayout/>
            ...

            <android.support.v7.widget.RecyclerView
                android:id="@+id/venue_place_info_gallery_recycler_view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"/>

            </LinearLayout>
    </ScrollView>

活动onCreate:

    RecyclerView galleryRecyclerView = (RecyclerView) findViewById(R.id.venue_place_info_gallery_recycler_view);
    galleryRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(gridLayoutColumns, StaggeredGridLayoutManager.VERTICAL));
    VenueGalleryAdapter venueGalleryAdapter = new VenueGalleryAdapter(VenuePlaceInfoActivity.this, images);
    galleryRecyclerView.setAdapter(venueGalleryAdapter);

适配器非常简单。它在构造函数中接收图像作为参数,以后不能更改数据。 我曾尝试将各种设置应用于RecyclerView布局,但无论是否有它们都可以使用相同的设置。例如:

    galleryRecyclerView.setNestedScrollingEnabled(false);
    galleryRecyclerView.setHasFixedSize(true);
    galleryRecyclerView.setLayoutFrozen(true);
    galleryRecyclerView.setPreserveFocusAfterLayout(false);

更新

我在answer of another question找到了有关该主题的更多信息。这完全是因为即使将setNestedScrollingEnabled设置为true,ScrollView和RecyclerView也无法生存在一起。但它仍然没有给我解决我的问题。我需要在图库RecyclerView上面放一些东西,我想向下滚动所有图像(不要将它们放在容器中)。

2 个答案:

答案 0 :(得分:0)

如果你希望你的布局看起来不错,我会使用一个带有AppBarLayout的CoordinatorLayout作为其中的第一个元素,将RecyclerView作为第二个元素。在AppBarLayout中,您应该放置您想要在RecyclerView上方的任何内容。类似的东西:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/white">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:elevation="0dp">

            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsing_toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_scrollFlags="scroll|enterAlways"
                app:titleEnabled="false">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:clipChildren="false"
                    android:clipToPadding="false"
                    android:orientation="vertical"
                    android:paddingTop="20dp"
                    app:layout_collapseMode="parallax">

                    <!-- stuff you want above your recyclerview -->

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

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

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

有人在这里做类似的事情,而不是在appbarlayout中使用工具栏,你可以使用你喜欢的任何视图布局。 AppBarLayout是一个扩展的Vertical LinearLayout:http://www.basagee.tk/handling-scrolls-with-coordinatorlayout/

答案 1 :(得分:0)

只需在您的活动/片段根目录布局上添加以下标记,就可以了。

android:descendantFocusability="blocksDescendants"