【问题标题】:Floating Action Button blocking other components阻止其他组件的浮动操作按钮
【发布时间】:2023-03-30 10:40:01
【问题描述】:

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

现在,假设您的列表视图有足够的项目来填满屏幕,从而无法滚动。如果您的列表项具有用户可以与之交互的特定组件,例如开关或喜爱的星星,则浮动操作按钮可能会阻止该组件。这种情况应该怎么处理?

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

【问题讨论】:

    标签: android android-layout material-design


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我只是做我认为 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" />
      

      【讨论】:

      • 如果我实现了这个,那么动画就不会应用于布局!
      【解决方案3】:

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

      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));
      

      【讨论】:

      • 为什么不直接使用 XML:paddingBottom="50dp"
      【解决方案4】:

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

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

      int currentPosition = list.getLastVisiblePosition();
      

      您将获得项目的最后一个编号。即如果第 7 个项目在您的列表中最后可见,那么它将返回 currentPosition = 7 的值;

      一旦你得到适合你屏幕的项目数量,现在检查标志

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

      【讨论】:

      • 如果列表中只有 7 个项目,它们都显示出来了,列表不能滚动但你隐藏了按钮,所以它不会与最后一个项目重叠,会发生什么?
      • 完全正确。当列表在屏幕上足够合适时隐藏按钮。
      • 那您不会缺少按钮的功能吗?
      • 我说了那家伙想要的。我知道这会杀死一些功能,但不推荐这样做。但是这家伙无论如何都需要隐藏它,所以我建议了一种方法来做到这一点。就是这样。
      • 他不想简单地隐藏按钮,而是处理无法滚动按钮的情况。放弃 FAB 用于的主要操作会很糟糕。
      【解决方案5】:

      您可以使用将 google 操作按钮的位置设置为左上角

           `android:layout_gravity="top|left"`
      

      这样看起来不错,不会隐藏任何东西。

      【讨论】:

      • 使用top|left 将按钮移动到第一个列表元素的顶部。
      【解决方案6】:

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

      添加属性android:clipToPadding="false" 以实现目标。如 cmets 中所述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-06
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 2015-11-14
        • 2018-10-18
        • 2015-09-01
        • 1970-01-01
        相关资源
        最近更新 更多