我可以将嵌套的FloatingActionButton锚定到视口吗?

尼克·卡多佐(Nick Cardoso)

我有一个嵌套如下的布局(为简便起见,我正在使用伪代码并跳过一些标签)

活动布局

CoOrdinatorLayout
    - AppBarLayout
         - FragmentOne
    - FragmentTwo

片段两个布局使用AppBarLayout.ScrollingViewBehavior但包含一个FAB:

CoOrdinatorLayout
    - FloatingActionButton
    - TabLayout

因此,运行时层次结构看起来像

CoOrdinatorLayout (Activity)
    - AppBarLayout
         - LinearLayout (FragmentOne)
    - CoOrdinatorLayout (FragmentTwo)
         - FloatingActionButton
         - TabLayout

FAB应该锚定在视口(物理屏幕)的右下角,但是(由于行为)应放在视口器的右下角(每个页面均包含列表)。这意味着仅当布局滚动到末尾(并且“应用栏”布局已折叠)时,FAB才可见

像这样嵌套时,有什么方法可以使FAB锚定到视口吗?将其移至活动不是一个好选择

编辑-已经过了几天,所以我在下面添加了我使用的解决方案,但是如果有人可以建议一个更清洁,基于XML的解决方案,我将更改接受的答案,因为这是我的追求

尼克·卡多佐(Nick Cardoso)

我使用的解决方案是在Fragment内以编程方式创建FAB(因此,该片段仍然是正确负责实现其侦听器的那个),然后将其附加到Activity的CoOrdinator布局(我在活动上使用getter接口发现了该布局)因为它似乎是使用的更清洁的替代方法getActivity().findViewById(...)

public class MyActivity extends implements MyCallbacks {
    ...
}

public interface MyCallbacks {
    CoordinatorLayout getCoordinatorLayoutRoot();
}

public class MyFragment extends Fragment {

    ...

    private void setupNewFab() {
        final CoordinatorLayout rootCoordinator = ((MyCallbacks) getActivity())
            .getCoordinatorLayoutRoot();
        final LayoutInflater inflater = (LayoutInflater) getActivity()
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        final FloatingActionButton fab = (FloatingActionButton) inflater.inflate(
            R.layout.my_fab_definition, rootCoordinator, false);
        fab.setOnClickListener(v -> myAction());
        rootCoordinator.addView(fab);
    }

}

需要注意的一件事是,我使用这种通货膨胀方法是将点击侦听器设置为的结果View.inflate(...)似乎无效

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以将小吃店锚定到 Android 原生底部导航栏吗?

QGLFramebufferObject可以大于视口吗?

将元素固定到视口顶部

当元素到达视口的一半时,我可以触发动画吗?

我可以即时更改移动浏览器中的视口元标记吗?

我可以使用`<img srcset>`或`<picture>`作为图像大小而不是视口大小吗?

我们可以用 Flutter 在 Flame 上旋转相机/视口吗?

如何将视口扩展到全屏宽度?

jQuery功能是否可以将视口高度加倍

我可以将嵌套json解组到平面结构中吗

导航栏可以锚定到特定位置吗?

我可以在YAML集合中锚定单个项目吗?

是否可以将元素锚定到居中元素?

如果Bootstrap 4的视口<XXXpx,容器(不是容器流体)的宽度可以为100%吗?

Wordpress get_template_part 可以基于视口大小吗?

Bootstrap 4x:您可以根据视口大小更改列顺序吗?

JavaScript库/技巧可以缩放以适合页面内容到视口?

我应该在电子应用程序中使用视口元吗?

动画高度到视口底部

我可以根据视口宽度重新分配SASS变量(媒体查询)

将div从容器扩展到视口的右边缘

我想为画布游戏制作视口

我可以将nullptr存储到bool吗?

我可以将变量传递到所需文件吗?

我可以将Docker容器部署到Azure Webapp吗

我可以将选项从optparse传递到argparse吗?

我可以将特定的PDF固定到“开始”菜单吗?

我们可以将ManagedObject绑定到View吗?

我可以将错误消息绑定到TextInputLayout吗?