을 사용하여 간단한 채팅 풍선을 구현하려고합니다 ConstraintLayout
. 이것이 내가 달성하려고하는 것입니다.
그러나 wrap_content
제약 조건에서는 제대로 작동하지 않는 것 같습니다. 여백을 존중하지만 사용 가능한 공간을 올바르게 계산하지 않습니다. 내 레이아웃은 다음과 같습니다.
<?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_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/chat_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0"
tools:background="@drawable/chat_message_bubble"
tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sodales accumsan tortor at bibendum."
android:layout_marginStart="64dp"
android:layout_marginLeft="64dp"
android:layout_marginEnd="32dp"
android:layout_marginRight="32dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" />
</android.support.constraint.ConstraintLayout>
다음과 같이 렌더링됩니다.
사용하고 com.android.support.constraint:constraint-layout:1.0.0-beta4
있습니다.
내가 뭔가 잘못하고 있습니까? 버그입니까, 아니면 직관적이지 않은 행동입니까? ConstraintLayout
(나는 다른 레이아웃을 사용할 수 있다는 것을 알고 있습니다 ConstrainLayout
. 구체적으로 요구하고 있습니다)를 사용 하여 올바른 동작을 얻을 수 있습니까?
답변
구식 : 더 나은 답변보기
아니요, 현재 ConstraintLayout (1.0 베타 4)으로 원하는 것을 수행 할 수 없습니다.
wrap_content
위젯 자체 측정 만 요청하지만 최종 제약 조건에 대한 확장을 제한하지 않습니다.match_constraints
(0dp) 는 제약 조건에 따라 위젯의 크기를 제한하지만 …wrap_content
더 작을 지라도 (첫 번째 예) 일치하지만 위젯은 일치 하지 않습니다.
그래서 지금, 당신은 그 특별한 경우에 운이 없습니다 :-/
이제 우리는 match_constraints
이 정확한 시나리오를 처리 하기 위해 추가 기능을 추가하려고 합니다 ( wrap_content
크기가 제약 조건을 초과하지 않는 한 동작 ).
이 새로운 기능이 1.0 릴리스 이전에 만들어 질 것이라고 약속 할 수는 없습니다.
편집 : 우리는 속성 app:layout_constraintWidth_default="wrap"
(폭이 0dp로 설정된)으로 1.0 에서이 기능을 추가했습니다 . 설정하면 위젯의 크기는 wrap_content를 사용하는 것과 동일하지만 제약 조건에 의해 제한됩니다 (즉, 위젯이 그 이상으로 확장되지 않음).
업데이트
이제 해당 태그는 더 이상 사용되지 않으며 대신 layout_width = “WRAP_CONTENT”및 layout_constrainedWidth = “true”를 사용하십시오.
답변
업데이트 됨 (ConstraintLayout 1.1. +)
app:layout_constrainedWidth="true"
함께 사용android:layout_width="wrap_content"
이전 (더 이상 사용되지 않음) :
app:layout_constraintWidth_default="wrap"
와 android:layout_width="0dp"
답변
네, Nikolas Roard의 답변에서 언급했듯이 app:layout_constraintWidth_default="wrap"
너비를 추가 하고 0dp로 설정 해야합니다 . 거품을 올바르게 맞추려면에 대해 1.0을 설정해야합니다 layout_constraintHorizontal_bias
.
최종 소스 코드는 다음과 같습니다.
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/chat_message"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="16dp"
android:layout_marginTop="8dp"
android:layout_marginStart="64dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintWidth_default="wrap"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/chat_message_bubble"
android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sodales accumsan tortor at bibendum." />
</android.support.constraint.ConstraintLayout>
결과적으로 다음과 같습니다.
답변
다른 답변과 마찬가지로 ConstraintLayout 1.0부터는 달성 할 수 있지만 최신 릴리스 (1.1.x)에서는 수행 방식이 변경되었습니다.
ConstraintLayout 1.1이 릴리스 된 이후에는 이전 app:layout_constraintWidth_default="wrap"
및 app:layout_constraintHeight_default="wrap"
속성 이 더 이상 사용되지 않습니다 .
wrap_content
동작 을 제공하고 싶지만 View에서 제약 조건을 계속 적용 하려면 문서에 명시된대로 너비 및 / 또는 높이를 및 / 또는 특성 과 wrap_content
결합 하도록 설정해야합니다 .app:layout_constrainedWidth=”true|false”
app:layout_constrainedHeight=”true|false”
WRAP_CONTENT : 구속 조건 적용 (1.1에 추가됨) 차원이 WRAP_CONTENT로 설정되면 1.1 이전 버전에서는 리터럴 차원으로 처리됩니다. 즉, 구속 조건은 결과 차원을 제한하지 않습니다. 일반적으로 이것은 충분하고 빠르지 만 일부 상황에서는 WRAP_CONTENT를 사용하면서도 결과 차원을 제한하기 위해 구속 조건을 유지하는 것이 좋습니다. 이 경우 해당 속성 중 하나를 추가 할 수 있습니다.
app : layout_constrainedWidth =”true | false”app : layout_constrainedHeight =”true | false”
최신 릴리스에 관해서는 내가 대답 할 때까지 ConstraintLayout은 버전 1.1.2 입니다.
답변
@의 니콜라 – roard의 대답 app:layout_constraintWidth_default="wrap"
과는 android:layout_width="0dp"
이제 사용되지 않음 .
가서 사용 app:layout_constrainedWidth="true"
하고 android:layout_width="wrap_content"
.
더 이상 사용되지 않는 이유는 모르겠습니다. 그러나 ConstraintLayout의 소스 코드에서 그 권리
답변
나는 이것을 사용한다
app:layout_constraintEnd_toEndOf="parent"
답변
교체해야합니다
android:layout_width="wrap_content"
와
android:layout_width="match_parent"
TextView에서 패딩 및 여백을 적절하게 조정하십시오. 코드를 업데이트했습니다.
<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_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/chat_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="10dp"
android:layout_marginLeft="60dp"
android:layout_marginRight="10dp"
android:layout_marginStart="60dp"
android:layout_marginTop="8dp"
android:padding="16dp"
app:layout_constraintTop_toTopOf="parent"
tools:background="#c9c7c7"
tools:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sodales accumsan tortor at bibendum." />