Якорь макета координатора (Java / Android / XML)

У меня есть макет с карточным представлением, привязанным к AppBarLayout в CoordinatorLayout. просмотр карты уменьшен с помощью кода, пока он не достигнет желаемого размера, когда я прокручиваю вверх. панель инструментов внутри AppBarLayout сворачивается, пока не достигнет установленной мной высоты

Вот проблемы:

  • Когда я прокручиваю до верхней части макета, половина карты оказывается ниже AppBarLayout.
  • Если я использую разные макеты (вместо просмотра карточек) - то только плавающая кнопка действия не опускается ниже AppBarLayout.

Кто-нибудь знает, как это исправить?

Вот мой xml-код:

<?xml version = "1.0" encoding = "utf-8"?>
<android.support.design.widget.CoordinatorLayout
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:fitsSystemWindows = "true">

<android.support.design.widget.AppBarLayout
    android:id = "@+id/app_bar_layout"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:fitsSystemWindows = "true"
    >

    <android.support.design.widget.CollapsingToolbarLayout
        android:id = "@+id/collapsing_toolbar"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:fitsSystemWindows = "true"
        app:contentScrim = "?attr/colorPrimary"
        app:layout_scrollFlags = "scroll|exitUntilCollapsed"

        >

        <ImageView
            android:id = "@+id/image1"
            android:layout_width = "match_parent"
            android:layout_height = "200dp"
            android:fitsSystemWindows = "true"
            android:scaleType = "centerCrop"
            app:layout_collapseMode = "parallax"
            android:src = "@drawable/data_bg"/>

        <android.support.v7.widget.Toolbar
            android:id = "@+id/toolbar"
            android:layout_width = "match_parent"
            android:layout_height = "100dp"
            android:gravity = "bottom"
            android:paddingRight = "5dp"
            app:contentInsetStartWithNavigation = "0dp"
            app:layout_collapseMode = "pin"
             />


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

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


<android.support.v4.widget.NestedScrollView
    android:id = "@+id/nested_content"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:background = "#fff"
    android:clipToPadding = "false"
    android:scrollbars = "none"
    android:scrollingCache = "true"
    app:layout_behavior = "@string/appbar_scrolling_view_behavior">


    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent">
        <TextView
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:text = "vjdsflkjsdfjdsfj;adsjfjdsfl \n    
            kjsdfjdsfj;adsjfjdsflkjsdfjdsfj;adsjf"/>
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>



<android.support.v7.widget.CardView
    android:fitsSystemWindows = "true"
    android:id = "@+id/my_card"
    android:layout_width = "@dimen/_270sdp"
    android:layout_height = "150dp"
    android:layout_marginTop = "-20dp"
    android:clickable = "true"
    app:layout_collapseMode = "parallax"
    app:layout_anchor = "@id/app_bar_layout"
    app:layout_anchorGravity = "bottom|center" >
    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:background = "#000"
        ></LinearLayout>
     </android.support.v7.widget.CardView>


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

Вот мой Java-код для масштабирования:

        ((AppBarLayout) view.findViewById(R.id.app_bar_layout)).addOnOffsetChangedListener((appBarLayout, verticalOffset) -> {


        int min_height = ViewCompat.getMinimumHeight(collapsing_toolbar) * 2;
        float scale = (float) (min_height + verticalOffset) / min_height;

        if (scale >= 0.6)
            cardView.setScaleY(scale >= 0 ? scale : 0);

    });

После просмотра карты ниже AppBarLayout:

Якорь макета координатора (Java / Android / XML)

введите описание изображения здесь

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
520
1

Ответы 1

Это происходит из-за:

app:layout_collapseMode = "parallax"

И добавил scroll|exitUntilCollapsed к CollapsingToolbarLayout, что заставляет CardView опускаться ниже AppBarLayout после коллапса.

Добавлять :

app:layout_collapseMode = "pin" 

К CardView, а затем удалите app:layout_collapseMode = "parallax".


У вас также есть другой вариант, который сделает его красивее, чем этот.

Отметьте этот ответ: https://stackoverflow.com/a/48892896/4409113

А вот пример: https://github.com/saulmm/CoordinatorBehaviorExample

Просто используйте:

app:behavior_overlapTop = "64dp"

На ваш взгляд, который вы хотите, чтобы он перекрывал содержимое CollapsingToolbarLayout.

Другие вопросы по теме