我有一个嵌套如下的布局(为简便起见,我正在使用伪代码并跳过一些标签)
活动布局:
CoOrdinatorLayout
- AppBarLayout
- FragmentOne
- FragmentTwo
片段两个布局使用AppBarLayout.ScrollingViewBehavior但包含一个FAB:
CoOrdinatorLayout
- FloatingActionButton
- TabLayout
因此,运行时层次结构看起来像
CoOrdinatorLayout (Activity)
- AppBarLayout
- LinearLayout (FragmentOne)
- CoOrdinatorLayout (FragmentTwo)
- FloatingActionButton
- TabLayout
FAB应该锚定在视口(物理屏幕)的右下角,但是(由于行为)应放在视口器的右下角(每个页面均包含列表)。这意味着仅当布局滚动到末尾(并且“应用栏”布局已折叠)时,FAB才可见
像这样嵌套时,有什么方法可以使FAB锚定到视口吗?将其移至活动不是一个好选择
编辑-已经过了几天,所以我在下面添加了我使用的解决方案,但是如果有人可以建议一个更清洁,基于XML的解决方案,我将更改接受的答案,因为这是我的追求
我使用的解决方案是在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] 删除。
我来说两句