2017-02-24 144 views
0

當使用CoordinatorLayout.Behavior和FloatingActionButton時,發生了一些奇怪的事情。FloatingActionButton和奇怪行爲

這裏是一個片段:

public class BottomFloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> { 
    public BottomFloatingActionButtonBehavior() { 
    } 

    public BottomFloatingActionButtonBehavior(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) { 
     return (dependency instanceof BottomNavigation); 
    } 

    @Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) { 
     if (dependency instanceof BottomNavigation) { 
      BottomNavigation bottomNavigation = (BottomNavigation) dependency; 
      int height = bottomNavigation.getNavigationHeight() - bottomNavigation.getBottomInset(); 
      float offset = bottomNavigation.getTranslationY() - height; 
      child.setTranslationY(offset); 
      return true; 
     } 

     return false; 
    } 
} 

當使用這種行爲我得到怪異邊距添加到按鈕: Margins on first frame

然後,隱藏按鈕,並再次示出當邊緣(片段之間導航)增加,但只有一次(每次迭代後不增加): enter image description here

這是我的佈局:

<?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" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".Activities.MainActivity"> 

    <android.support.design.widget.CoordinatorLayout 
     android:id="@+id/layout_coordinator" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true"> 

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

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

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

     <FrameLayout 
      android:id="@+id/frame_content" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

     <it.sephiroth.android.library.bottomnavigation.BottomNavigation 
      android:id="@+id/navigation_bottom" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      app:layout_behavior="@string/bbn_appbar_behavior" 
      app:bbn_entries="@menu/activity_main_navigation" /> 

     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/button_action" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="end|bottom" 
      app:borderWidth="0dp" 
      app:fabSize="normal" 
      app:layout_behavior="it.sephiroth.android.library.bottomnavigation.BottomFloatingActionButtonBehavior" 
      app:srcCompat="@drawable/ic_fa_plus_white_24dp" 
      app:useCompatPadding="true"/> 

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

我在做什麼錯?這是什麼行爲? 最有趣的是,如果我改變我的超級類FloatingActionButton.Behavior那麼所有的利潤甚至開關片段(顯示/隱藏序列)走了之後: enter image description here

但是這個類本身控制小吃吧所以它贏得了」爲我工作。

這是使用最新的(以前也是)支持lib:25.2.0在Nougat和KitKat版本上測試的。不同之處在於 - 在KitKat上不存在「第二個轉變階段」。利潤從一開始就顯現出來。

+0

您是否嘗試將'app:useCompatPadding =「false」'? – nikis

+0

你是否真的需要這種簡單情況下的行爲?爲什麼不使用這些2的垂直線性佈局,並在常規佈局階段完成所有工作? – nikis

+0

謝謝。它對牛軋糖有幫助,但對KitKat沒有幫助。也許有其他建議嗎? –

回答

0

嘗試設置android:minWidthandroid:minHeight0dp

<android.support.design.widget.FloatingActionButton 
     android:minWidth="0dp" 
     android:minHeight="0dp" 
     android:id="@+id/button_action" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end|bottom" 
     app:borderWidth="0dp" 
     app:fabSize="normal" 
     app:layout_behavior="it.sephiroth.android.library.bottomnavigation.BottomFloatingActionButtonBehavior" 
     app:srcCompat="@drawable/ic_fa_plus_white_24dp" 
     app:useCompatPadding="true"/> 
+0

不幸的是它沒有幫助。 –