2

Я борюсь со странным поведением маржи с FloatingActionButton в CoordinatorLayout. FAB добавляет дополнительный запас, который исчезает после определенных действий.FloatingActionButton добавляет дополнительный запас над NestedScrollView в CoordinatorLayout

Я следовал Cheesesquare пример для создания подробного представления. У меня точно такая же структура xml. Единственное различие заключается в том, что я использую этот вид для фрагмента вместо сырой активности.

Это происходит большую часть времени, но иногда это не так. Происходит только один раз для объекта фрагмента, как только он исправляет себя, он работает хорошо. На моем втором телефоне этого не происходит. После удаления FAB это нормально. Когда я изменяю sth в календаре, это также заставляет марку исправлять себя.

Прикрепление gif с включенными линиями раскладки, чтобы вы могли видеть поля.

margin bug gif

Для справки:

<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/main_content2" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white" 
    android:fitsSystemWindows="true" 
    tools:context="com.habitsteacher.android.view.fragment.show.ShowHabitFragment"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="192dp" 
     android:fitsSystemWindows="true" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsingToolbarLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:expandedTitleMarginBottom="72dp" 
      app:expandedTitleMarginEnd="24dp" 
      app:expandedTitleMarginStart="48dp" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <TextView 
       android:id="@+id/intentionText" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="bottom" 
       android:layout_marginBottom="16dp" 
       android:layout_marginEnd="24dp" 
       android:layout_marginLeft="48dp" 
       android:layout_marginRight="24dp" 
       android:layout_marginStart="48dp" 
       android:ellipsize="end" 
       android:fitsSystemWindows="true" 
       android:maxLines="2" 
       android:textColor="@color/icons" 
       android:textSize="@dimen/abc_text_size_subhead_material" 
       app:layout_collapseMode="parallax" 
       app:layout_collapseParallaxMultiplier="0.25"/> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar_show_habit" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="?attr/colorPrimary" 
       app:layout_collapseMode="pin" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

      </android.support.v7.widget.Toolbar> 

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

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

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="fill_vertical" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <LinearLayout 
      android:id="@+id/habit_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@android:color/background_light" 
      android:orientation="vertical" 
      android:paddingTop="32dp"> 

      <android.support.v7.widget.CardView 
       android:id="@+id/calendarWrapper" 
       android:layout_width="match_parent" 
       android:layout_height="343dp" 
       android:layout_margin="@dimen/card_margin"> 
      </android.support.v7.widget.CardView> 

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

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/floating_button_edit_habit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="0dp" 
     android:layout_marginEnd="16dp" 
     android:layout_marginRight="16dp" 

     android:clickable="true" 
     android:src="@drawable/ic_mode_edit_white_24dp" 
     app:layout_anchor="@id/appbar" 
     app:layout_anchorGravity="bottom|right|end"/> 

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

Все думали, что может быть причиной, или как исследовать это глубже?

ответ

0

Похоже, что CoordinatorLayout не работает должным образом внутри фрагмента, который добавляется как не первый в действие. Это похоже на ошибку в SDK, но я не смог точно определить причину.

Поскольку он работает правильно, только когда макет расположен на первом добавленном фрагменте для активности, я переместил фрагмент с этим макетом для разделения активности и теперь работает правильно.

Тем не менее, это избегает этого поведения, не фиксируя его, поэтому любой ответ по-прежнему ценится.

+0

Любое понимание вопроса? Я получаю такое же поведение, когда я автоматически переключаю представления, чтобы добавить кроссфейд. – AllDayAmazing

+0

Не совсем. Применение моего обходного пути для вашего дела, вероятно, будет перемещать эти представления для разделения действий и переключения между ними. Мне жаль, что я не знал, что для этого нужно, но я ничего не мог найти, а отладка менеджеров макетов Android - непростая задача. – damienix

Смежные вопросы