Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Android Apk 이름
- Android Apk
- Android Apk 이름 변경
- error
- android fragment
- Exception
- android error
- FLUTTER
- apache gzip
- release unsigned
- DataTable
- html
- release Apk
- CSS사용법
- Program type already present
- Firebase
- jQuery
- MySQL
- Android
- R프로그래밍
- Java
- java error
- Eclipse
- tomcat
- fragment
- Kotlin
- css
- spring
- 안드로이드
- JavaScript
Archives
- Today
- Total
selfstarter
android constraintlayout 속성 정리 본문
android constraintlayout 속성 정리
Bias
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
app:layout_constraintHorizontal_bias="0.7"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
- bias는 편견, 치우치다는 의미.
- app:layout_constraintHorizontal_bias에서 숫자가 작을 수록 수평에서 start쪽에 치우치고 클수록 end 쪽에 치우친다
- 0.7은 1을 100% 이므로 수평에서 70% 치우쳤다는 의미이다
constrainedWidth, constrainedHeight
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:ellipsize="end"
android:maxLines="1"
android:text="Hello World!123123123123123123122223231232312321!"
app:layout_constrainedWidth="true"
app:layout_constrainedHeight="true"
app:layout_constraintEnd_toStartOf="@+id/button1"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/text1"
app:layout_constraintTop_toTopOf="parent" />
- app:layout_constrainedWidth를 사용하면 전체 너비안에 화면에 요소가 전부보이도록 너비를 수정해준다
- 높이를 벗어나고 싶지 않다면 app:layout_constrainedHeight="true"
- 길이가 길어지는 위젯에 써야한다(위에 예제에서 버튼에 쓰면 안됨)
Percent
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintWidth_percent="0.4"
android:text="testtest"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
- layou_width를 0을 주고 layout_constraintWidth_percent에 0~1사이 퍼센트 값을 넣으면 퍼센트에 따라 너비가 달라진다
goneMargin
<Button
android:id="@+id/hello1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello hello1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
<Button
android:id="@+id/hello2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello hello2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/hello1"
android:layout_marginLeft="10dp"
app:layout_goneMarginLeft="300dp"
/>
- 관계되어있는 위젯이 gone일 때 고정된 위치에 놓고 싶을 때 (goneMargin... 속성들을 사용한다)
- 만약 app:layout_goneMarginLeft가 설정되어 있다면 관계된 위젯의 visivility상태가 gone일 때 app:layout_goneMarginLeft의 margin값으로 설정된다
- 만약 app:layout_goneMarginLeft가 설정되어 있지 않다면 layout_margin에 설정된 값이 적용됨
<Button
android:id="@+id/hello1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="hello hello1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginLeft="20dp"
/>
- layout_width을 match_parent로 한 후 margin을 주면 해당 margin만큼 여백이 생긴다
위젯의 길이만큼 너비를 늘리고 싶은 경우
<Button
android:id="@+id/hello1"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="hello hello1"
android:background="#ff0000"
/>
<Button
android:id="@+id/hello2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/hello1"
android:text="hello hello2"
android:background="#00ff00"
/>
<Button
android:id="@+id/hello3"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@id/hello1"
app:layout_constraintEnd_toEndOf="@id/hello2"
android:text="hello hello3"
app:layout_constraintTop_toBottomOf="@id/hello1"
android:background="#aaaaff"
/>
- constraintStart_toStartOf에 hello1 id를, constraintTop_toBottomOf에 hello2 id를 넣어준다. 그러면 너비가 wrap_content이기 때문에 hello1, hello2 위젯의 정중앙에 위치하게 된다
- layout_width를 0dp로 하면 start, end가 관계되어있는 위젯의 위치로 이동해서 길이가 맞춰진다
Ratio
<Button
android:id="@+id/hello1"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="hello hello1"
android:background="#ff0000"
app:layout_constraintDimensionRatio="1:7"
/>
- app:layout_constraintDimensionRatio 속성을 사용해 높이와 너비를 비율을 이용해 길이를 지정할 수 있다
- app:layout_constraintDimensionRatio 속성 값 앞에 있는 숫자가 너비이고 뒤에 있는 숫자가 높이이다
Chains
- chain에는 head가 되는 기준 위젯이 존재
- 가로측 기준일 때 맨 왼쪽노드가 head, 세로축 기준일 때 맨 위 위젯이 head
- chain style은 CHAINT_SPREAD, CHAIN_SPREAD_INSIDE, CHAIN_PACKED 총 3개의 chain style 지원
CHAINT_SPREAD
-
CHAINT_SPREAD은 서로 연결된 후 별도의 style을 지정하지 않으면 적용됨
-
모든 노드가 균등한 여백을 가지도록 설정된다
-
만약 한 노드의 너비를 0dp로 한다면 해당 노드가 나머지 2노드를 제외한 넓이를 차지한다
<Button android:id="@+id/hello1" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toStartOf="@id/hello2" android:text="hello hello1" android:background="#ff0000" />
CHAIN_SPREAD_INSIDE
-
CHAINT_SPREAD 속성과 비슷하다. 단 하나 양끝쪽 여백이 없다는 점이 다르다
-
chain style은 head가 되는 노드에 설정하면 된다
-
chainStyle 너비를 조정하고 싶을 경우 app:layout_constraintHorizontal_chainStyle="spread_inside" 사용
-
chainStyle 높이를 조정하고 싶을 경우 app:layout_constraintVertical_chainStyle="spread_inside" 사용
CHAIN_PACKED
- 여백이 있는 대신 중앙으로 여백없이 노드들이 정렬된다
- head node에 layout_constraintHorizontal_chainStyle 속성을 추가한다
- 너비 조정 시 app:layout_constraintHorizontal_chainStyle="packed" 사용
- 높이 조정 시 app:layout_constraintVertical_chainStyle="packed" 사용
- bias 설정으로 여러 노드를 하나의 bias 값으로 설정 가능
GuideLine
- GuideLine은 실제 앱에서는 보이지 않는 작업을 도와주는 선인다
- guidelien을 기준으로 위젯의 위치를 설정할 수 있다
<androidx.constraintlayout.widget.Guideline
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/guide_line"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.1" />
<androidx.constraintlayout.widget.Guideline
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/guide_line2"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.1" />
Group
-
여러개의 위젯을 하나로 묶어 gone or visibe 하려고 할 때 view계층을 만들어서 하게 되면 depth가 높아지고 코드가 복잡해진다
-
이 때 Group을 사용해서 불필요한 계층을 만들지 않도록 한다
-
아래 예제를 보면 Group 위젯에 constraint_referenced_ids 속성에 id를 작성하여 visibility를 제어하고 있다
-
만약 하나의 위젯이 두개의 group에 속해있을 경우, visibility는 마지막에 정의된 group의 속성을 따른다
<androidx.constraintlayout.widget.Group
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="hello1,hello2"
android:visibility="gone"
/>
<androidx.constraintlayout.widget.Group
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="hello2,hello3"
/>
Placeholder
- Placeholder는 무엇이든 담을 수 있는 그릇이라고 생각하면 된다.
- 예를 들어 버튼의 위치, 크기 등을 변경하고 싶을 때, java 코드로 변경하지 않고 변경하고 싶은 placeHolder를 만든 다음 이벤트 발생 시 placeHolder가 가지는 contentId를 설정해주면 쉽게 변경이 가능하다
- 아래 예제에서는 click 이벤트가 발생할 때 placeHolder에 button id를 setting한다
<androidx.constraintlayout.widget.Placeholder
android:id="@+id/placeholder"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHeight_percent=".60"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
/>
- MainActivity.java
public void clickFunction(View view) {
Log.d("TEST_LOG", "click?");
Placeholder placeholder = findViewById(R.id.placeholder);
placeholder.setContentId(R.id.btn1);
}
비율로 widget 크기 조정하기
- weight를 줘서 비율로 widget의 너비를 조정할 수 있다
- 비율을 주려는 widget끼리 서로 관계를 가지고 있어야 한다(layout_constraintStart_toStartOf 같은 위치 속성으로 서로가 서로를 기준으로 위치를 잡아야 함)
- 첫번째 노드는 start를, 마지막 노드는 end를 parent로 잡으면 너비, 높이를 꽉채우면서 weight도 적용된다.(만약 양쪽 관계를 잡지 않으면 비율은 되는데, 가로, 세로 화면일 때 같은 dp를 가져 동적화면구성이 되지 않는다)
- 서로 관계를 가지고 있으면 chain 관계 상태. layout_constraintHorizontal_chainStyle 으로 chain style을 설정할 수 있다
- 각 widget에 layout_constraintHorizontal_weight, layout_constraintVertical_weight 속성을 준다(비율은 실수, 정수 둘 다 가능)
<Button
android:id="@+id/button1"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintHorizontal_weight="80"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/button2"
/>
<Button
android:id="@+id/button2"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintHorizontal_weight="15"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:layout_constraintStart_toEndOf="@id/button1"
app:layout_constraintEnd_toEndOf="parent"
/>
'App > Android' 카테고리의 다른 글
<column constraints>or comma expected 해결방법 (0) | 2020.05.23 |
---|---|
Android 동영상을 배경화면 넣기 (0) | 2020.05.21 |
AnimatedVectorDrawable for Android (0) | 2020.05.17 |
Android Error NotFoundException String resource ID (0) | 2020.05.06 |
Kotlin 사용법(Kotlin Summary with kotlin tutorial) (0) | 2020.04.04 |
Comments