2016-01-10 3 views
1

«Разрыв края» Я имею в виду Google design guidelines. FAB «ломает край», когда он расположен между двумя соседними элементами.Как сделать FloatingActionButton «сломать край»

Я хочу, чтобы мой FAB располагался между моей панелью инструментов и моим контентом. Но сейчас она полностью появляется на верхней части представления контента:

anchored FAB

Мой FAB закреплен на панели инструментов. Вот код:

<android.support.design.widget.AppBarLayout 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

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

    <include layout="@layout/content_main"/> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     app:layout_anchor="@id/toolbar" 
     app:layout_anchorGravity="bottom|right|end" 
     android:src="@android:drawable/ic_dialog_email" /> 

В примерах, которые я видел here это, как его предполагается сделать. Вы привязываете FAB к панели инструментов, а затем устанавливаете силу привязки на bottom|right|end

Что я делаю неправильно?

+0

Вы не должны прикреплять FAB на панели инструментов. – jimmy0251

+0

Как мне достичь желаемого эффекта? – dopatraman

+0

Принятый ответ здесь работает для меня: http://stackoverflow.com/questions/24459352/how-can-i-add-the-new-floating-action-button-between-two-widgets-layouts –

ответ

2

Вы должны якорь FAB к AppBarLayout вместо Toolbar. Однако почему-то привязка работает только в том случае, если высота AppBarLayout более чем в два раза превышает высоту . Окончательный код будет таким.

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="168dp" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" /> 

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


<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="16dp" 
    android:src="@android:drawable/ic_dialog_email" 
    app:layout_anchor="@id/appbar" 
    app:layout_anchorGravity="bottom|right|end" /> 
+0

ничего себе, это сработало. Почему мне нужно указывать статическую высоту для 'AppBarLayout'? Это вызовет проблемы для меня позже. – dopatraman

+0

Это не статическая высота, это может быть нечто большее, чем в два раза выше высоты ActionBar. FAB автоматически скрывается за чем-то меньшим. – jimmy0251

+0

Если вы хотите, чтобы высота 'AppBarLayout' была установлена ​​на' wrap_content', в качестве уродливого взлома, вы можете установить 'minHeight' AppBarLayout' в' 1dp'. – jimmy0251

1

Вам нужен CoordinatorLayout так:

<?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" 
    xmlns:card="http://schemas.android.com/tools" 
    android:id="@+id/rootLayout" 
    android:fitsSystemWindows="true"> 

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

     <android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsingToolbarLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed" 
      app:expandedTitleMarginStart="48dp" 
      app:expandedTitleMarginEnd="64dp" 
      android:fitsSystemWindows="true"> 

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


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

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

    <!-- ListView or NestedScrollView or RecyclerView etc.. --> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     app:layout_anchor="@+id/appbar" 
     app:elevation="6dp" 
     app:borderWidth="0dp" 
     app:layout_anchorGravity="bottom|right|end" /> 

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

Какова цель 'CollapsingToolbarLayout'? – dopatraman

+0

Если вы хотите, чтобы ваша панель инструментов расширялась, как https://www.google.it/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=0ahUKEwiOiPnyjqDKAhUBERQKHV6gAiMQjRwIBw&url=http%3A%2F%2Fd-codepages. com% 2Fcollapsing-toolbar-android-example% 2F & psig = AFQjCNF8xDC0r0ZWSqe485yD5RIYQiK59A & ust = 1452545257690623 –

+0

Это неверно. – dopatraman

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