与自定义行为一起使用时滑动以刷新布局问题

时间:2018-11-19 16:00:10

标签: android android-coordinatorlayout swiperefreshlayout

我有一个CoordinatorLayout,其中包含一个带有自定义CoordinatorLayout.Behavior(item_search_button)的视图和一个SwipeRefreshLayout,其中包含一个NestedScrollView。 自定义视图是一个按钮,该按钮应以正常滚动的方式滚动出屏幕,但应在用户向上滚动列表后立即出现(从顶部滚动)。这按预期工作。 我的问题是SwipeRefreshLayout的刷新指示符出现在自定义视图item_search_button的后面。

 <android.support.design.widget.CoordinatorLayout
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolbar_startpage"
        app:snackbar="@{offlineSnackbarVM.snackbarData}">

        <include
            layout="@layout/item_search_button"
            app:vm="@{searchButtonVM}"/>

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipeRefreshLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:refreshing="@{reloadVM.refreshInProgress}">

            <android.support.v4.widget.NestedScrollView
                android:id="@+id/nestedView"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <LinearLayout
                    android:id="@+id/elementsContainer"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:paddingTop="@dimen/spacing_48"/>

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

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

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

item_search_button.xml:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<data class="SearchButtonBinding">

    <variable
        name="viewmodel"
        type="vm.SearchButtonVM"/>

</data>
 <android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="behaviors.ScrollSnapBehavior"
    android:layout_margin="@dimen/spacing_8"
    android:onClick="@{() -> vm.openSearch()}">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="8dp"
            android:ellipsize="end"
            android:maxLines="1"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/leftIcon"
            app:layout_constraintRight_toLeftOf="@+id/rightIcon"
            app:layout_constraintTop_toTopOf="parent"/>

    </android.support.constraint.ConstraintLayout>

</android.support.v7.widget.CardView>
</layout>

enter image description here

但是我想要在项目之前。 我该怎么解决?

2 个答案:

答案 0 :(得分:1)

select weeknum, col1 from datatset1 d1, dataset2 d2 where d1.datettime>d2.start_date and d1.datetime<d2.end_date; 具有默认标高,尽管它是CardView中的第一个子代(请参见documentation,以获取{ {1}}起作用)。要使RecyclerView在刷新时消失在列表/进度指示器下方,您可以暂时将其标高设置为零,并在刷新完成后将其重置。

假设您在 res / values / dimens.xml

中有一个用于标高的尺寸资源
CoordinatorLayout

然后您可以通过编程方式设置高程。

Java版本:

CoordinatorLayout

科特林版本:

CardView

答案 1 :(得分:0)

最后,我通过

的解决方法解决了我的问题
  1. 使用onScrollListener检查列表是否位于顶部, 设置translationX(如果在顶部)以使指示器覆盖 卡片视图。
  2. 使用setProgressViewOffset()增加偏移量并绘制 在卡片视图下方,以避免令人讨厌的闪烁效果。

为我工作...