【问题标题】:Can I anchor nested FloatingActionButton to the viewport?我可以将嵌套的 FloatingActionButton 锚定到视口吗?
【发布时间】:2017-01-29 11:33:57
【问题描述】:

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

活动布局

CoOrdinatorLayout
    - AppBarLayout
         - FragmentOne
    - FragmentTwo

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

CoOrdinatorLayout
    - FloatingActionButton
    - TabLayout

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

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

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

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

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

【问题讨论】:

    标签: android android-coordinatorlayout floating-action-button


    【解决方案1】:

    我使用的解决方案是在 Fragment 中以编程方式创建 FAB(因此 Fragment 仍然是正确负责实现它的侦听器等的那个),然后将其附加到 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(...) 的结果上似乎不起作用

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2016-04-16
      • 2014-01-24
      • 2023-03-18
      • 2013-09-11
      • 1970-01-01
      相关资源
      最近更新 更多