浮动操作按钮阻挡其他组件

Floating Action Button blocking other components

Material Google 的新设计建议使用浮动操作按钮来吸引用户注意该屏幕上的主要操作。在列表视图中有很多这样的例子。

现在,假设您的列表视图中的项目刚好可以填满屏幕,因此无法滚动。如果您的列表项具有用户可以与之交互的特定组件,例如开关或最喜欢的明星,则浮动操作按钮可能会阻止该组件。我们该如何处理?

编辑:这实际上总是发生在列表中的最后一项

加载列表时,您可以创建一个标志并确定列表中的项目是否是屏幕中的最后一个可见项目,然后隐藏浮动按钮。

使用它来查找最后一个可见的项目

int currentPosition = list.getLastVisiblePosition();

您将获得 item.i 的最后一个数字。e 如果第 7 个项目在您的列表中最后可见,那么它将 return currentPosition = 7 的值;

获得适合屏幕的项目数后,现在检查标志

if(listAdapterItemsArray.get(position) == currentPosition) {
    //hide button
} else {
    //nothing 
}

在列表页脚添加一个与浮动按钮高度相同的空白视图。因此,当您滚动列表时,最后一项会出现,浮动按钮不会隐藏列表的最后一项。这是一个简单快捷的解决方案。

我现在刚遇到这个问题,我是这样解决的:

public void addBlankSpace(ListView listView)
{
    Space space = new Space(listView.getContext());
    space.setMinimumHeight(Core.dpToPx(50));
    listView.addFooterView(space);
}

而且我想总有更好的方法。比如检查你是否需要它。然后才显示它。但现在,这个简单的代码工作得很好。

这里是转换函数:

public static int dpToPx(int dp)
{
    return (int)(dp * Resources.getSystem().getDisplayMetrics().density);
}

或者我们可以添加一些填充:

listView.setPadding(0, 0, 0, Core.dpToPx(50));

您可以使用

将google操作按钮的位置设置为左上角
     `android:layout_gravity="top|left"`

这样好看又不遮遮掩掩

我只是做我认为 Google Gmail 应用正在做的事情,并向 RecyclerView(或 ListView)添加填充。请记住将 clipToPadding 设置为 false,以便 RecyclerViewCoordinatorLayout.

内时能够正确运行
<android.support.v7.widget.RecyclerView 
    android:id="@+id/my_recyclerview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clipToPadding="false" 
    android:paddingBottom="100dp" />

RecyclerView 添加底部填充。另外,除非您在 layout manager 中覆盖了 onMeasure,否则不要使用 android:layout_height="wrap_content"。当前的布局管理器还支持 包装内容。

添加属性android:clipToPadding="false"以达到目的。如评论中所述。