返回介绍

1.2 依赖关系

发布于 2024-12-23 22:19:58 字数 1193 浏览 0 评论 0 收藏

假设此时有两个 View: AB ,那么有两种情况会导致依赖关系:

  • AanchorB
  • AbehaviorB 有依赖(比如 FloatingActionButton 依赖 SnackBar )。

依赖关系建立的前提是两个 View 在同一个 Coordinatorlayout 中。

CoordinatorLayout 中维护了一个 mDependencySortedChildren 列表,里面含有所有的子 View, 按依赖关系排序,被依赖者排在前面 。我们可以看一下用来排序的 Comparator

final Comparator<View> mLayoutDependencyComparator = new Comparator<View>() {
   @Override
   public int compare(View lhs, View rhs) {
     if (lhs == rhs) {
       return 0;
     } else if (((LayoutParams) lhs.getLayoutParams()).dependsOn(
         CoordinatorLayout.this, lhs, rhs)) {
       return 1;
     } else if (((LayoutParams) rhs.getLayoutParams()).dependsOn(
         CoordinatorLayout.this, rhs, lhs)) {
       return -1;
     } else {
       return 0;
     }
   }
};

注意,在建立 mDependencySortedChildren 并排序完成之后(在 measure 的第一步处理完成),每次对子 View 的遍历 都是通过它进行顺序遍历 ,保证了被依赖的 View 最先被处理。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。