![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/UxAxl/btrbrTKnXW1/5ao4kuN5w3bmcictoONB31/img.jpg)
앱 제작 시 안드로이드 생명 주기에 따라 회전 처리가 이루어지면 앱의 데이터가 날라가 버리게됩니다. 이러한 부분을 방지하기 위해 뷰 모델 클래스를 사용됩니다. 뷰 모델을 사용하면, 화면 회전 같은 변경된 구성에서도 데이터를 계속 유지할 수 있습니다. 우선, 아래의 이미지를 먼저 확인해 봅시다. 액티비티 생명주기가 진행되는데, 회전이 이루어지면 onPause ~ onDestroy ~ onCreate 등과 같이 액티비티가 없어지고 재생산됩니다. 뷰 모델 클래스 안에 데이터가 구현되는 담게 되면, 구성이 변경되더라도 담고 있는 내용이 유지되고 onCleared가 호출됩니다. 그럼 뷰 모델 클래스의 기본 코드를 살펴 봅시다. 아래와 같이 ViewModel을 상속받아, 나만의 뷰 모델 클래스를 작성해주면 됩니다...
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/HGdAB/btrbotllkLl/VdM0bFBYF9KCQkl1l0C1jk/img.jpg)
오늘은 안드로이드 Paint 클래스의 다양한 상수값인 Flag에 대해 알아보도록 하겠습니다. 여러 종류의 플래그 중에서 자주 사용되는 플래그만 모아봤습니다 :) 1. ANTI_ALIAS_FLAG 앤티앨리어싱을 활성화하는 페인트 플래그입니다. 앤티앨리어싱은 네모난 픽셀로 이루어진 곡선, 원형 등의 이미지가 매끄럽게 보이지 못하는 것을 부드럽게 해줍니다. 2. EMBEDDED_BITMAP_TEXT_FLAG 텍스트를 그릴 때 비트맵 글꼴을 사용할 수 있도록 하는 페인트 플래그입니다. 이 플래그를 비활성화하면, 텍스트 글꼴에 포함된 비트맵 스트라이크를 사용하지 못하게 됩니다. 따라서, 확장 가능한 윤곽선과 비트맵 스트라이크가 모두 있는 글꼴은 확장 가능한 윤곽선만 나타내고, 비트맵 스트라이크 글꼴은 표현할 수 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/BhZnb/btrbxqUqkqM/j7GScIeXP5kcNK9LeZpAG0/img.jpg)
해당 프로젝트의 이전에 작성한 코드를 뷰바인딩으로 바꿔보겠습니다. 모듈 단위의 build.gradle에 뷰 바인딩을 선언하면, 레이아웃 XML 파일들의 이름 뒤에 Binding이 붙은 채로 클래스가 생성되게 됩니다. 우선 아래의 코드 처럼, 전역 변수로 binding을 선언하는데, 타입으로는 뷰 결합으로 생성된 ActivityMainBinding을 지정합니다. 그리고 binding에 layoutInflater로 뷰를 가져올 수 있도록 선언하고, view에는 binding.root를 선언합니다. binding.root는 바인딩이 가지는 프로퍼티인데 root를 통해서 어떤 뷰를 가지고 있는지 알게됩니다. 이로써 binding을 사용해 원하는 XML 뷰를 가져올 수 있습니다. private lateinit v..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/VuW0t/btrbvbwkrTW/6zBILanaMYG25vRMa0crb1/img.jpg)
필요한 업무를 텍스트뷰에 입력하여, 버튼을 누르면 추가되고, 업무가 수행되면 상황이 바뀌는 그런 식의 앱 프로젝트입니다. 우선 기본적인 레이아웃을 만들어줍니다. 텍스트뷰에 입력을 받을 수 있도록 하고, Vector Access를 이용해 원하는 모양의 삭제 아이콘을 가져옵니다. 여기서는 쓰레기통 모양의 아이콘을 이용할 것입니다. 리사이클러뷰를 사용하고, 추가되는 업무(아이템)가 리사이클러뷰 내에 표시될 수 있도록 준비합니다. 코틀린은 객체 지향이 가능한 언어입니다. 리사이클러뷰에 표시되는 추가 업무를 객체를 데이터 클래스로 만들어 줍니다. 메인 액티비티에 필요한 데이터 클래스를 아래와 같이 작성하도록 합니다. 데이터 클래스는 자동으로 getter, setter를 구현합니다. 필요한 업무를 기록하기 위한 t..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/ljMVb/btrbuAJUJrs/KHjkdF2xqcFj3YHPyXGVE0/img.jpg)
findViewById를 매번 사용하여 뷰를 가져오는 경우, 뷰가 여러 개인 경우 관리 포인트가 많아지고 코드가 복잡해질 수 있습니다. 뷰 바인딩은 여러 뷰 객체들을 관리하고, 쉽게 가져올 수 있도록 도와주는 역할을 합니다. XML 레이아웃 파일에 정의된 뷰들을 바로 가져와 쓸 수 있어 매우 편리합니다. 기본적인 사용 방법은 우선, build.gradle의 모듈 단위에 아래와 같이 코드를 추가합니다. android { viewBinding { enabled = true } } 뷰 바인딩 사용 방법을 요약하자면 아래와 같습니다. 우선 setContentView(R.layout.activity_main) 처럼 설정된 부분을 뷰 결합을 통해서 바꿔줘야 합니다. 이렇게 함으로써, xml 객체를 binding에 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/MQvWh/btra6IPhNnz/tjAz8w28QRGb1gzwQZOnx1/img.jpg)
1~30 중의 숫자에서 랜덤한 숫자 5개를 뽑는 어플을 제작하는 프로젝트입니다. 해당 어플에서 중점적인 부분을 정리하면 다음과 같습니다. 1. UI 부분에서는 텍스트뷰에서 android:visibility 속성을 사용해서 텍스트를 보이고, 감추도록 합니다. 2. 레이아웃은 Constraint Layout을 사용합니다. 레이아웃의 내의 뷰에 제약을 줌으로써 원하는 스타일로 레이아웃을 배치할 수 있습니다. 3. 필요한 변수는 실제 사용 시에 초기화되면서, 값이 할당되도록 lazy init을 사용합니다. 4. 난수를 뽑는 함수는 apply를 함수를 통해서 초기화를 시키는데, 반복문 내에서 이미 뽑은 번호는 그냥 넘어갈 수 있도록 continue로 빠져 나옵니다. 난수를 리턴하기 전까지, 기존에 뽑았던 번호는 ..
- Total
- Today
- Yesterday
- 2007년 사건사고
- 2019년 사건사고
- 안드로이드 프로젝트
- Bmi Calculator
- 뷰 바인딩
- ToDo List 앱 만들기
- 2021년 사건사고
- 안드로이드 스튜디오 에러
- android adapter
- bmi 계산기 만들기
- 탭레이아웃
- view binding
- 선형 레이아웃
- lazy init
- 안드로이드 앱 만들기
- 리스트뷰
- 메소드 오버라이딩
- 상대적 레이아웃
- 인텐트
- 안드로이드 어댑터
- findViewById
- 대한민국 미제사건
- tabLayout
- RecyclerView
- 미제사건
- notifyDataSetChanged
- 리사이클러뷰
- 자바스크립트 배열
- 애드뷰
- addView
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |