2016-06-17 51 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 –