확장 플러그인
특정 환경을 위해 부가적으로 제공하는 기능
코틀린은 2가지의 기능을 제공 하는데요
- XML에서 만든 UI 요소를 findViewById() 없이 접근하는 'View Binding'
- 안드로이드에서 객체를 직렬화할 때 사용하는 'parcelable'
View Binding
레이아웃 XML 파일에서 만든 UI 요소를 코드에서 접근할 수 있도록 변수에 바인딩하는 것을 해보겠습니다!
상단에 있는 'res > layout > activity_main.xml' 을 더블클릭해서 디자인 탭을 열어 줍니다!
버튼을 드래그해서 상단에 보내주고 이름도 설정해주구요!
음 ... 저는 상단 중앙에 두고 싶은데 이친구 ... 아무리 드래그해도 안움직이네요?
이럴땐 모다?
우리의 지피티 선생에게 문의를 했지요!
두가지 버전으로 제시를 해주네요
ConstraintLayout 사용
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="16dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
LinearLayout에서 버튼을 상단에 배치하기
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="top" <!-- 상단 정렬 추가 -->
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:layout_marginTop="16dp" />
</LinearLayout>
아직 차이점이 뭔지는 모르겠지만 뭔가 둘다 실행해보니 첫번째는 오류도 많고 지금 코드랑 차별점이 많아서 그냥 두번째 코드를 발전 시켜 볼께요!
계속해서 내 마음에 안드는 답변을 주던 우리 지피티 선생과 시간과 인내의 시간을 거치고 나니
흘러나오는 컨트리 음악의 편안함 처럼 저에게 드디어 원하는 답을 주셨네요
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:paddingTop="16dp" > <!-- 상단 여백 -->
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
디자인 탭
지금 코드를 보면 'LinerLayout' 으로 시작하는데 이 친구로 하면 디자인 탭에서 사용하는 'Infer Constraints'가 사용이 안된다고 하네요?
그래서 우리는 지피티 선생을 통해 코드를 수정해봅니다!
코드를 수정하고 보니 문제가 잔뜩?
우리 코딩의 맛은 이런 에러들을 해결하는 맛 아니겠어요?
동그란 문제들이 발생해서 네모들이 이상하죠?
그래서 'Gradle Scripts > build.gradle.kts (:app)' 에 들어가서 코드를 수정해서 해당 친구들을 설치해줍니다
그렇게 되면 네모들이 나타나서 해당 설치류들 해결하라고 알려주는데 'Sync Now' 를 누른다면 네모들이 나타납니다
각종 에러들 ...
아마 다들 사용하시는 버전에 따라 다 에러가 다 다르실텐데 ... 저는 이 긴 여정을 해결하는 내용들을 축약해서 공유해볼까 해요
e: file:///Users/solpapa/Desktop/Re_start/KotlinSample/app/build.gradle.kts:70:20: Unexpected tokens (use ';' to separate expressions on the same line)
e: file:///Users/solpapa/Desktop/Re_start/KotlinSample/app/build.gradle.kts:70:20: Too many characters in a character literal ''androidx.constraintlayout:constraintlayout:2.1.4''
내용을 축약하면 이렇습니다
지피티 선생은 저에게 해법으로
dependencies {
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
// 다른 종속성들
}
그래서 그대로 사용했더니 ...
이전에 제 안드로이드 스튜디오의 설정값이랑 달랐던 내용이였고 그 부분을 발견하고 수정을 하는 과정이였던겁니다!
(, ) 와 ', ' .... 거의 수학문제 1이냐 0이냐의 느낌적인 느낌이네유
'개발일지' 카테고리의 다른 글
버튼(Button)으로 초기화면 만들어보기 (2) | 2024.11.02 |
---|---|
코딩 지옥의 맛을 살짝 본 ... 'ConstraintLayout' ... 마법봉아 어딨니? (1) | 2024.10.31 |
kotlin? Java? 안드로이드 스튜디오에서 뭘 쓰면 더 좋을까? (5) | 2024.10.29 |
GPT가 그러던데, 훌륭한 계획이래! 프로젝트의 구조를 살펴보는건 (2) | 2024.10.28 |
안드로이드 스튜디오도 '깃허브' 해야지? (1) | 2024.10.27 |