Udacity Developing Android Apps with Kotlin 레슨2 Layouts 요약
Lesson 2: Layouts
- TextView.fontFamily donloadable font
- apk에 폰트 사이즈 적재 없이 사용 가능
- fonts source가 google fonts로 제한되는 게 단점
- 데이터 바인딩 라이브러리 사용
- app/build.gradle
- activity_main.xml
- findViewById 대체
- MainActivity.kt
- private lateinit var binding: ActivityMainBinding
- …
- binding = DataBindingUtils.setContentView(this, R.layout.activity_main)
- binding.name.text = “BSSCCO”
- 데이터 바인딩
- 개념
- 데이터와 뷰를 한 번 연결시켜두면 이후엔 데이터만 수정해도 뷰는 알아서 바뀐다.
- 데이터가 바뀔 때 뷰의 속성들을 일일히 수정할 필요 없이 레이아웃을 구성하는 단계에서 레이아웃 파일 안에다 데이터값을 명시해두면 된다.
- MyName.kt
- // val 말고 var로 선언 양방향 데이터 바인딩이 되어야 하기 때문
- // @={}는 양방향
- // @{}는 read-only
- // {} 안에서 잘못된 수식을 쓰면 에러를 안 잡아줘서 고생할 수도 있으니 계산함수를 미리 정의해두고 그걸 호출하자
- // 수식 쓸 때 UTF-8 관련 에러도 날 수 있어어 위와 같이 쓰는 게 좋음.
- data class MyName(var name: String = “”)
- activity_main.xml
-
- …
-
-
- …
- <TextView
- android:id="@+id/name"
- android:text="@={myName.name}
- />
-
- MainActivity.kt
- private val myName: MyName = MyName(“BS”)
- …
- binding.myName = myName
- binding.button.setOnClickListener {
- myName.name = binding.nameEdit.text.toString()
- binding.invalidateAll()
- }
- ConstraintLayout
- 이점
- UI를 반응형으로 만들 수 있다.
- view hierarchy의 깊이를 크게 줄일 수 있다.
- constraints를 사용해서 뷰 배치를 자유롭게 할 수있다.
- 디자인모드로 레이아웃을 짜고나서 텍스트모드에서 불필요한 속성을 제거하는 작업을 해주어야 XML코드가 깔끔해진다.
- 특징
- absolute positioning
- relative positiㅓoning
- 축에서 비율로 위치 지정 bias
- 가로세로 비율 ratio
- 축에서 체인으로 묶기 chain
- spread cahin
- spread inside chain
- weighted chain(=linear layout의 weight)
- packed chain