[英]Bottom padding of FAB gone when Snackbar appears
莫因,
我在CoordinatorLayout
內部使用FAB遇到奇怪的行為。
當出現Snackbar
,FAB會向上滑動,但會直接Snackbar
到Snackbar
而不會產生任何padding
(第二張圖像)。
Snackbar
消失后,FAB向下移動到屏幕邊緣且沒有填充(第三張圖像),直到幾秒鍾后,當FAB再次神奇地向上移動(布局重新生效?)並且填充恢復正常(第四次)時圖片)。
我已經從API 16到23對此進行了測試。
我的布局如下所示:
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/pullToRefreshContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:id="@+id/empty"
[...]
</LinearLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabAdd"
style="@style/MyTheme.FloatingActionButton"
app:layout_anchor="@id/recycler"
app:layout_anchorGravity="bottom|right|end"
app:useCompatPadding="true"/>
</android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.SwipeRefreshLayout>
相應的主題如下所示:
<style name="MyTheme.FloatingActionButton" parent="Widget.Design.FloatingActionButton">
<item name="android:layout_width">56dp</item>
<item name="android:layout_height">56dp</item>
<item name="android:layout_gravity">bottom|right</item>
<item name="android:layout_marginRight">6dp</item>
<item name="android:scaleType">center</item>
</style>
有人知道導致這種現象的原因嗎? 我希望FAB始終保持其padding
。
我最近遇到了同樣的問題。 TL; DR; 我通過以下方法解決了它:
public class MyFabBehavior extends FloatingActionButton.Behavior {
public MyFabBehavior() {
super();
}
public MyFabBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean getInsetDodgeRect(
@NonNull CoordinatorLayout parent,
@NonNull FloatingActionButton child,
@NonNull Rect rect) {
return false;
}
}
說明:
CoordinatorLayout
允許其子級設置dodgeInsetEdges
。 它是重力值。 如果沒有此參數,則每當另一個孩子進入我們視圖的矩形時,它們就會重疊。 但是,在設置了dodgeInsetEdges
CoordinatorLayout將移動我們的視圖,以避免與指定方向重疊。 FAB的默認值為bottom。
此外,CoordinatorLayout允許我們使用視圖的矩形定義我們自己的矩形,而不是使用它。 這可以通過在我們的行為中覆蓋getInsetDodgeRect
來完成。 FAB會這樣做,而問題就從這里開始。
在棒棒糖之前的設備上或將useCompatPadding
設置為true時,FAB將添加用於繪制陰影的填充。 這是必要的,因為棒棒糖之前的視圖無法在其邊界之外繪制陰影。
根據FAB默認行為的評論,添加陰影填充后,FAB應將其自身偏移回到其原始位置。 但是,這沒有發生。 另一方面,躲閃插入rect仍然偏移,因此在Snackbar遮住陰影之后將FAB向上推,然后一直拖動到底部。 上面的解決方案基本上將其恢復為默認值。
在這一點上,我仍然不知道為什么抵消FAB不能按預期進行。 也許如果有人可以提供更多有關此的信息,則可以找到更好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.