RecyclerView始终位于其他视图之上

时间:2020-02-14 14:32:53

标签: android android-recyclerview view imageview android-relativelayout

在我看来,我已经阅读了关于stackoverflow的所有主题,但没有找到解决方案。

问题是 ImageView 始终位于 RecyclerView 下,但是我需要在顶部显示 ImageView RecyclerView

问题:为什么会发生这种情况,我该如何解决?

是非示例:

enter image description here

我的XML:

<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 android:clickable="true"
 android:focusable="true"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 android:background="@drawable/bottom_style"
 android:overScrollMode="never"
 app:behavior_hideable="false"
 app:behavior_peekHeight="150dp"
 app:layout_behavior="....BottomSheetController.MyBottomSheetBehavior">

 <androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginTop="6dp"
    android:layout_marginBottom="6dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <....BottomSheetController.MyRecyclerView
            android:id="@+id/recycler_view"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:overScrollMode="never" />

        <ImageView
            android:id="@+id/close"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_button_close" />
    </RelativeLayout>
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.core.widget.NestedScrollView>

3 个答案:

答案 0 :(得分:0)

尝试下面的代码

<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:clickable="true"
        android:focusable="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@color/colorAccent"
        android:overScrollMode="never"
        app:behavior_hideable="false"
        app:behavior_peekHeight="150dp"
        app:layout_behavior="....BottomSheetController.MyBottomSheetBehavior">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_marginTop="6dp"
            android:layout_marginBottom="6dp">

            <androidx.coordinatorlayout.widget.CoordinatorLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp">



 <....BottomSheetController.MyRecyclerView
                       android:id="@+id/recycler_view"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:overScrollMode="never" />


            </androidx.coordinatorlayout.widget.CoordinatorLayout>
            <ImageView
                android:id="@+id/close"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:src="@drawable/ic_button_close" />
        </RelativeLayout>

    </androidx.core.widget.NestedScrollView>

答案 1 :(得分:0)

如果没有使用RelativeLayout来解决问题,是否有任何特殊原因需要将内容包装在FrameLayout中,请记住将android:layout_gravity="end|top"设置为关闭按钮在高端。因此,代码如下所示:

<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:clickable="true"
    android:focusable="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/bottom_style"
    android:overScrollMode="never"
    app:behavior_hideable="false"
    app:behavior_peekHeight="150dp"
    app:layout_behavior="....BottomSheetController.MyBottomSheetBehavior">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_marginTop="6dp"
        android:layout_marginBottom="6dp">

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp">

            <....BottomSheetController.MyRecyclerView
            android:id="@+id/recycler_view"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:overScrollMode="never" />

            <ImageView
                android:id="@+id/close"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="end|top"
                android:src="@drawable/ic_button_close" />
        </FrameLayout>
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.core.widget.NestedScrollView>

从我看来,RelativeLayout之所以显示错误的输出是因为,原因是z轴上的视图距离是根据生成它们的顺序设置的。因此,即使ImageView是在recyclerview之后设置的,也位于顶部,但是内部的支架是在之后生成的,因此位于imageview的顶部。 如果它是在imageview之前生成的简单视图,则图像将根据需要位于顶部。

P.S .:我没有找到任何与此相关的文档,并且纯粹是我认为的工作方式,因此,如果不是那样的话,任何人都可以自由地纠正我。

答案 2 :(得分:0)

尝试将此代码添加到您的适配器中

close = (ImageView) itemView.findViewById(R.id.close);
         close.bringToFront();