본문 바로가기
깡샘 코틀린

08-3 시계 앱의 스톱워치 기능 만들기(실습)

by 농농씨 2023. 8. 2.

뷰 바인딩 기법 복습

레이아웃 XML 파일에 선언한 뷰 객체를 코드에서 쉽게 이용하는 방법!

레이아웃 XML 파일에 등록한 뷰는 findViewId() 함수로 얻어서 사용해야 하는데 이것은 상당히 귀찮은 방법이다.

뷰 바인딩 기법으로 쉽게 객체를 이용할 수 있다.

build.gradle 파일의 android 영역에 buildFeatures를 선언하고

buildFeatures {
    viewBinding = true
}

처럼 뷰 바인딩 기법을 사용하겠다고 선언하면

레이아웃 XML 파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어진다!

즉, 우리가 직접 코드에서 뷰를 선언하고 findViewById() 함수를 호출하지 않아도 이를 구현한 클래스가 자동으로 만들어지므로 이 클래스를 이용해 뷰를 사용하기만 하면 된다.

그렇게 자동으로 만들어진 클래스의 inflate() 함수를 호출하면 바인딩 객체를 얻을 수 있다. 그리고 바인딩 객체의 root 프로퍼티에는 XML의 루트 태그 객체가 자동으로 등록되므로 액티비티 화면 출력은 setContentView() 함수에 binding.root를 전달하면 된다.(암튼 엄청 간편해졌다는 뜻)

 

 

1. 뷰 바인딩 기법

책에서는 

viewBinding {
    enabled = true
}

로 뷰 바인딩 기법을 이용하는데 구글링 해보니 뭔가 아래처럼 업데이트 된 것 같다

android {
	...
    
    buildFeatures { // 뷰바인딩
        viewBinding = true
    }
}

viewBinding을 단독선언하지 않고 buildFeatures{} 로 감싸는듯!

 

2. layout_alignParentBottom 속성

아무래도 deprecated 된건지 자동완성이 안돼서 뭐지했다

layout_alignParentBottom : 부모 컨테이너의 아래쪽과 뷰의 아래쪽을 맞춤. 인데

왜 안되는걸까...

 

찾아보니

That is because android:layout_alignLeft, android:layout_below, etc. are only bounded to the RelativeLayout not in LinearLayout, LinearLayout has only two orientation which is vertical and horizontal it does not support layout alignment for each Views.
solution:
change your parent layout to RelativeLayout

라고 한다

아차차~

책에는 RelativeLayout으로 되어있었는데 내가 잘못한거였다

ㅎㅎ

 

3. shoud use "sp" for text size

글자크기에는 dp 말고 sp 쓰라고 한다

 

4. unresolved reference:appcompat

아까까지만 해도 잘되던 appcompat 라이브러리가 갑자기 임포트가 안된다...😬

끝없는 오류와의 전쟁 🫠

onCreate 함수도 못쓰고........ 그냥 아무것도 모타는중

 

230804 결국 해결했다.

안드로이드 스튜디오가 2022년 초 버전이었는데 삭제하고 올해 버전으로 깔았다.

근데 또 문제 발생!

avd가 실행이 안됐다...

이건 안드로이드 가상 기기 만들 때 시스템이미지를 x86_64 images를 사용해서 생긴 문제인것 같아서(책이랑 최대한 맞추려고 한 거였는데) recommended 탭에 있는 걸로 사용했다... 이거땜에 정말 애 많이 먹었따. 하나 다운받는데만 1.5기가인데 기다리고도 안되니 힘들엇다.

일단 해결!은 했는데

1.5기가씩 차지하는 다른 시스템 이미지 삭제하는 법좀 알려주실분... 맥북버전...

왼쪽은 사용할 수 있었던 것. 오른쪽은 사용하려다 실패한 것.

5. avd 실행했을 때 오류는 안뜨는데 내가 작성한 액티비티는 안뜨고 메인에 hello android! 만 뜬다면?

메인 액티비티 파일에 자동으로 생성되어있는 클래스와 그 클래스를 사용한 구문들을 지워주면 된다.

대충 프로젝트명 우클릭하고 "hello" 검색하니까 위치 찾음

 

6. 초기화 버튼을 눌렀는데 초기화가 안된다면?

이거 아직 해결 못함.. 머가문제지?

초기화 버튼을 누르면 즉시 초기화가 안되고 start 버튼을 눌러야 비로소 00:00부터 다시 시작된다

초록선은 아직까지도 왜 뜨는지 잘 모르겟다 해킹이라도 당했나? 일단 토스트메시지도 잘 뜬다 굳굳

 

 

공부일기

더보기

실습은 초반이라 아직 에러가 많이 나는 것 같다. 조만간 익숙해지겠지...

모르면 얼렁뚱땅 넘어가는 방법으로는 절대 아무것도 할 수가 없다는 걸 깨달았다. 다음단계로 넘어가야지!

그리고 확실히 직접 해보니까 뷰 바인딩 기법이 무슨 의미인지, 왜 필요한지 확실히 알게 되었다.

그리고 코드를 따라치는 게 아니라 읽고 이해할 수 있어야 오류를 해결할 수 있다는 게 체감이 됐다... 아자아자 파이팅