2017-04-07 11 views
7

Tôi đang cố gắng sử dụng ConstraintLayout (phiên bản 1.0.2) để đặt chiều cao của 2 chế độ xem cạnh nhau . Điều này phục vụ như một ViewHolder trong cho một RecyclerView, trong đó mỗi TextView có độ dài tùy ý của văn bản ...ConstraintLayout: đặt chiều cao của tất cả các chế độ xem theo hàng để khớp với chiều cao nhất của một trong số các chế độ xem đó là

Nếu tôi đặt từng thành wrap_content, cái ngắn hơn sẽ co lại. Nếu tôi đặt cả 0dp (match_contraints), cả hai kết thúc là 0 chiều cao.

Dưới đây là các thiết lập:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_marginLeft="2dp" 
    android:layout_marginRight="2dp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/id1" 
     android:layout_width="60dp" 
     android:layout_height="0dp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintEnd_toStartOf="@+id/id2"/> 

    <TextView 
     android:id="@+id/id2" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintStart_toEndOf="@+id/id1" 
     app:layout_constraintEnd_toEndOf="parent"/> 

</android.support.constraint.ConstraintLayout> 

Tôi cho rằng đây là lỗi, là "0dp" nên hành động giống như match_parent hơn thực tế 0 dp.

Trên iOS, bằng cách này, các quy tắc Bố cục tự động tương đương (thiết lập chiều cao của lượt xem để khớp với phần trên cùng và dưới cùng của phần tử gốc) tạo ra kết quả mong đợi.

Tất nhiên điều này là khá đơn giản sử dụng LinearLayout, nhưng cách bố trí này đóng một phần trong một bố cục lớn hơn, và tôi muốn để cắt các hệ thống phân cấp view ...

Trả lời

2

Answering, trong trường hợp bất cứ ai đang tìm ra câu trả lời trong thời gian tới.

ConstraintLayout giới thiệu Barrier trong v1.1 để đạt được một chức năng như vậy hỏi của OP trong câu hỏi

Các chức năng nêu trên có thể đạt được sử dụng dưới đây xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_marginLeft="2dp" 
    android:layout_marginRight="2dp" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/id1" 
     android:layout_width="60dp" 
     android:layout_height="0dp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintEnd_toStartOf="@+id/id2" 
     app:layout_constraintBottom_toBottomOf="@+id/barrier" 
     android:text="@string/id1_text" /> 

    <TextView 
     android:id="@+id/id2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintStart_toEndOf="@+id/id1" 
     app:layout_constraintEnd_toEndOf="parent" 
     android:text="@string/id2_text" /> 

    <android.support.constraint.Barrier 
     android:id="@+id/barrier" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:barrierDirection="bottom" 
     app:constraint_referenced_ids="id1,id2" /> 

</android.support.constraint.ConstraintLayout> 
+1

Bạn nên sử dụng Ctrl + K hoặc Cmd + K để định dạng đúng các đoạn mã nguồn của bạn. –

1

Điều này có thể giúp bạn.

<android.support.constraint.ConstraintLayout 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin"> 

    <TextView 
     android:id="@+id/tv_1" 
     android:layout_width="150dp" 
     android:layout_height="match_parent" 
     android:layout_marginEnd="8dp" 
     android:layout_marginRight="8dp" 
     android:background="@color/colorAccent" 
     android:gravity="center" 
     android:padding="@dimen/activity_vertical_margin" 
     android:text="sjdjhshdjhdjhsdgfjhgsdjfgjsdgfjsdgfhgdsjhfghs" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toLeftOf="@+id/tv_2" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <TextView 
     android:id="@+id/tv_2" 
     android:layout_width="150dp" 
     android:layout_height="match_parent" 
     android:background="@color/colorPrimary" 
     android:gravity="center" 
     android:padding="@dimen/activity_vertical_margin" 
     android:text="sjdjhsjhd" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintLeft_toRightOf="@+id/tv_1" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toTopOf="parent" /> 

</android.support.constraint.ConstraintLayout> 

enter image description here

enter image description here

+0

Không hoạt động . Có lẽ đệm dọc của bạn ẩn vấn đề. – jazzgil

+0

Dù sao, match_parent không được hỗ trợ và được coi là 0dp, AFAIK. – jazzgil

+0

Tôi nhận thấy rằng, với chiều rộng cố định (60dp) và chiều cao match_parent, nó sẽ hoạt động. – CodeCameo

Các vấn đề liên quan