gpt4 book ai didi

android - 我可以将嵌套的 FloatingActionButton 锚定到视口(viewport)吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:02:21 24 4
gpt4 key购买 nike

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

Activity 布局:

CoOrdinatorLayout
- AppBarLayout
- FragmentOne
- FragmentTwo

fragment 二布局使用 AppBarLayout.ScrollingViewBehavior 但包含一个 FAB:

CoOrdinatorLayout
- FloatingActionButton
- TabLayout

所以运行时层次结构看起来像

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

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

有什么方法可以让 FAB 像这样嵌套时锚定到视口(viewport)吗?将它移动到 Activity 中不是一个好的选择

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

最佳答案

我使用的解决方案是在 Fragment 中以编程方式创建 FAB(因此 Fragment 仍然是正确负责实现它的监听器等的那个),然后将它附加到 Activity 的 CoOrdinator 布局(我发现它使用 getter 接口(interface)在 Activity 上,因为它似乎比使用 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(...) 的结果上设置点击监听器似乎不起作用

关于android - 我可以将嵌套的 FloatingActionButton 锚定到视口(viewport)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com