일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- activity
- 알고리즘
- notification
- CustomView
- Android
- 알림
- onMeasure
- 코틀린
- Coroutine
- 안드로이드
- Behavior
- LiveData
- BOJ
- AppBarLayout
- HTTP
- room
- CollapsingToolbarLayout
- Algorithm
- DataBinding
- sqlite
- onLayout
- View
- recyclerview
- Navigation
- ViewModel
- hilt
- kotlin
- lifecycle
- 백준
- CoordinatorLayout
- Today
- Total
목록Android (111)
개발일지
Activity와 Fragment가 생명주기를 갖는 것처럼 View도 생명주기를 갖는다. Constructor View(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0) context : 현재 테마와 리소스를 접근할 수 있도록 도와준다. 도한 동적으로 생성할 때 가장 간단한 방법이다. attrs : XML로 View를 Inflate할 때 XML로 속성을 받아오는 인터페이스다. defStyleAttr : 테마에서 기본 스타일을 지정할 수 있고, 기본 스타일에서 Attr값을 찾아와서 적용한다. defStyleRes : defStyleAttr에서 값을 찾을 수 없는 경우 defStyleRes를 사..
View가 그려지는 순서는 measure -> layout -> draw 과정을 거친다. 또한 전위순회 방식(부모를 그리고 자식을 형제순으로) 으로 그린다. Measure measure(widthMeasureSpec: Int, heightMeasureSpec: Int) View의 크기를 측정하는 과정이다. final 함수이지만 내부적으로 onMeasure를 호출하고 onMeasure를 재정의하여 사용할 수 있다. 아직 ChildView는 measure된 상태가 아니기 때문에 width, measuredWidth 는 0이 반환될 수 있다. setMeasureDimension(measuredWidth: Int, measuredHeight: Int) View의 크기를 측정한다. onMeasure에서 필수적으로..
Fragment는 Activity에서 UI 일부를 나타냅니다. 하나의 Activity에서 여러 Fragment를 사용하여 UI를 구축할 수 있으며, 여러 Activity에서 Fragment가 재사용될 수 있습니다. Fragment는 Activity처럼 사용자에게 입력을 받고 생명주기를 가집니다. 즉 Activity를 모듈화한 것으로 생각하면 됩니다. Fragment의 생명주기는 Activity 생명주기에 영향을 받습니다. (Activity가 PAUSE 상태고 들어가면 Fragment도 PAUSE 상태로 들어가고, Activity가 DESTROY되면 Fragment도 DESTROY됩니다.) Fragment는 FragmentManager로 관리되며 FragmentManager를 좀 더 간편하게 사용하기 위해..
Glide 인터넷에 있는 이미지를 쉽게 처리할 수 있는 라이브러리다. 또한 대체 이미지, 에러 처리, 캐쉬 등 다양한 기능을 지원한다. https://rkdxowhd98.tistory.com/63 Android in A..Z - Glide Glide Android에서 Image를 빠르게 불러오기 위한 라이브러리다. 기본적으로 이미지, GIF를 불러올 수 있고, 에러처리, 디스크 캐쉬등 다양한 기능을 제공한다. Glide의 원칙은 어떠한 이미지도 빠르고 rkdxowhd98.tistory.com Header Image를 Request할 때 헤더가 필요할 수도 있다. 그럴 경우 Glide에서 Header 기능을 사용하여 추가할 수 있다. CustomTarget 완료했을 때 처리할 방법을 Custom화 할 수 ..
Gson을 사용하여 Number Type을 변경할 때 Int형을 Double로 자동으로 변경하는 경우가 있다. Gson은 Number Type을 기본으로 Double로 변경하기 때문인데 TypeToken을 통해 Type을 지정해주자! Gson().fromJson(json, object : TypeToken() {}.type)
Android에서 ConstraintLayout의 Group 기능을 사용하면 쓸데없는 ViewGroup을 줄일 수 있다. ex) 한번에 여러 View의 Visible를 관리할 때 새로운 ViewGroup을 만들어서 ViewGroup하나로 관리할 수 있지만 쓸데없는 ViewGroup이 늘어나며 성능에 영향을 줄 수 있다. 하지만 ConstraintLayout의 Group 기능을 사용할 경우 Group에 Tag 또는 Id로 View를 매핑하여 쉽게 관리할 수 있다. Group기능을 제대로 사용하기 위해선 매핑되는 View들의 Id가 정의되어야 한다. id를 정의하지 않은 View는 Group의 기능을 제대로 사용할 수 없다.
Android에서 Jetpack Navigation Component를 사용할 때 Global Action을 RecyclerView ViewHolder에서 바로 findNavController를 사용하는 경우 종종 does not have a NavController set Exception이 발생한다. * Dialog에서 RecyclerView를 사용하는 경우 자주 발생한다. itemView.findNavController() 위에 문제를 발생하는 코드를 아래로 고치자. Navigation.findNavController(activity, R.id.nav_host) Hilt를 사용하여 DI 패턴을 적용하면 RecyclerViewAdapter에서 Activity나 Fragment를 쉽게 가져올 수 있다.
RecyclerView Selection에서 선택한 ViewHolder의 키 값을 가져오기 위해 ItemKeyProvider를 사용한다. 보통의 경우 StableIdKeyProvider를 사용할 수 있다. 하지만 StableIdKeyProvider은 내부적으로 Cache 기능을 사용하기 때문에 Selection이 등록된 후 Item을 제거하는 기능을 사용하면 내부적으로 동기화가 되지 않는다. E/AndroidRuntime: FATAL EXCEPTION: main Process: com.taetae98.qrreader, PID: 30548 java.lang.IllegalArgumentException at androidx.core.util.Preconditions.checkArgument(Precondit..