Проведите пальцем, чтобы обновить проблему макета при использовании с пользовательским поведением - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть 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 голосов
/ 20 ноября 2018

Наконец-то я решил проблему с помощью обхода

  1. Использование onScrollListener для проверки, прокручивается ли список сверху и установите translationX, если он сверху, чтобы индикатор закрасил просмотр карты.
  2. Использование setProgressViewOffset() для увеличения смещения и закраски ниже карты, чтобы избежать неприятного эффекта мерцания.

У меня работает ...

0 голосов
/ 19 ноября 2018

CardView имеет высоту по умолчанию, благодаря которой он отображается над RecyclerView, хотя это первый дочерний элемент в CoordinatorLayout (описание работы CoordinatorLayout см. В документации ),Чтобы CardView исчезал под списком / индикатором выполнения во время обновления, вы можете временно установить его высоту на ноль и сбросить его после завершения обновления.

Предположим, у вас есть ресурс измерения для повышенияв res / values ​​/ dimensions.xml

<dimen name="cardview_elevation">4dp</dimen>

Затем вы можете установить высоту программно.

Версия Java:

float normalElevationInPixels = getResources().getDimensionPixelSize(R.dimen.cardview_elevation);
myCardView.setCardElevation(normalElevationInPixels);

Kotlinверсия:

val normalElevationInPixels = resources.getDimensionPixelSize(R.dimen.cardview_elevation)
myCardView.cardElevation = normalElevationInPixels
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...