2016-06-17 47 views
1

我目前正在熟悉新的ConstraintLayout,并尝试将它们与卡片视图相结合,但在试图对齐两个CardView之间的元素时遇到了障碍。在不同的ConstraintLayout中将元素对齐到元素

我想在这张照片对准

  • 的心脏象形与甲流
  • 的5 initative与倡议
  • 10的速度

The current status

但我似乎无法做到这一点。这是我试过的:

ConstraintLayout 
    -CardView 
     -ArmorClassTextView 
     -... 
    -CardView 
     -HitPointView 
     -... 

这不起作用,因为约束添加到嵌套元素似乎被忽略。

LinearLayout 
    -CardView 
     -ConstraintLayout 
      -ArmorClassTextView 
      -... 
    -CardView 
     -ConstraintLayout 
      -HitPointView 
      -... 

这里,HitPointView可以与其ConstraintLayout中的其他元素对齐,但不能与其他元素对齐。如果我尝试,我得到一个错误,指出被引用的元素不是在同一个RelativeLayout中的兄弟。

你能否给我一个关于如何完成这种类型的对齐的提示?我已经用完了想法。

回答

1

它实际上并没有很好的理由:ConstraintLayout看到的所有东西(它可以布置的东西)都是它的直接子元素(事实上和其他布局一样)。这就是为什么你不能在这两个卡片视图中设置一个约束,因为在这种情况下卡片视图是你可以应用约束的唯一元素。

现在,未来有几件事情我们正在考虑实施,这可能有助于这种情况(虚拟视图组,绘制元素..)。但是,这对于ConstraintLayout的未来版本,所以只是现在这不是真的对你有所帮助:)

这就是说,有几件事情你今天可以做一个变通方法:

  • 如果使用两个ConstraintLayout,您可能需要添加垂直方向,并在两个布局中以相同的方式创建它们;然后将内部要素限制在这些准则中。具体而言,您可以在33%和66%的相对位置创建两条垂直指南,以基本创建3列,然后通过连接每条边来居中元素: < - A - >| < - B - >| < - C - > | 。然后复制你的第二个cardview的设置。不是很好,但可能更容易维护。

  • 使用单个ConstraintLayout,但不是将中的元素设置为卡片视图,而是将其移出。在xml的开头声明cardviews,然后是小部件。约束cardviews到widget的方式,他们会正确地调整大小(使用0dp)

+0

我试图按照你的第二个建议 - 用CardView单ConstraintLayout使用0dp它包装的Widget。但是不管XML中的顺序如何,CardView总是绘制在小部件的顶部。这是我的代码:https://gist.github.com/davidvavra/c266757113eced899e6a598281fa561e –