본문 바로가기

분류 전체보기

(72)
[Android] Dagger & Hilt ViewModelFactory Dagger를 통해 DI 구현 중 ViewModelProvider.Factory를 의존성 주입하여 구현하는 방법을 정리해본다. 코드들은 Kotlin으로 작성했다. import androidx.lifecycle.ViewModel import dagger.MapKey import java.lang.annotation.* import java.lang.annotation.Retention import java.lang.annotation.Target import kotlin.reflect.KClass @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @MapKey annotation class ViewModelKey(val ..
[Android] Gson 과 android.location.Location val location = Location("") location.latitude = 37.5666805 location.longitude = 126.9784147 val gson = GsonBuilder().create() Log.d(TAG, gson.toJson(location)) // Logcat 출력 {"mElapsedRealtimeNanos":841385802305} Gson 을 이용해 android.location.Location 클래스를 Json으로 바꿀 경우 mElapsedRealtimeNanos 필드만 된다. 주의하자. Hawk 라이브러리로 Location 객체를 저장하던 중 발견했다. 별도의 클래스로 저장을 해야한다. 주의해야겠다.
[Android] Material Indeterminate Progress Drawable 커스텀 얇고 사이즈가 큰 Progress를 만들어야 하는 일이 있어서 Material Style 리소스들을 뜯어보며 만들어 보았습니다. animated vector, vector, animator 를 조합하여 만들 수 있습니다. vector_drawable_progress_bar_large.xml strokeWidth 를 통해 두께 설정 가능 trim_start_interpolator.xml trim_end_interpolator.xml progress_indeterminate_material.xml progress_indeterminate_rotation_material.xml progress_indeterminate_anim_large_material.xml
[Android] 지난 주 날짜 가지고 오기 fun firstDayOfLastWeek(c: Calendar): Calendar { var c = c c = c.clone() as Calendar c.firstDayOfWeek = Calendar.MONDAY // 일주일의 시작으로 잡을 요일 // last week c.add(Calendar.WEEK_OF_YEAR, -1) // first day c[Calendar.DAY_OF_WEEK] = c.firstDayOfWeek return c } fun lastDayOfLastWeek(c: Calendar): Calendar { var c = c c = c.clone() as Calendar c.firstDayOfWeek = Calendar.MONDAY // 일주일의 시작으로 잡을 요일 // first d..
[Android] 앱이 죽은 경우 스플래쉬부터 시작하기 앱이 크래쉬가 안 나면 좋겠지만, 그게 맘대로 되지 않는다. 앱이 죽은 경우 안드로이드 자체에서 앱을 자동으로 올려주기도 하지만, 스플래쉬를 거쳐 초기화하는 작업이 되지 않으면 동작에 문제가 생겨버려 작업하게 되었다. RuntimeException을 받아 처리해 버린다. UncaughtExceptionHandler class UncaughtExceptionHandler(val context: Context) : Thread.UncaughtExceptionHandler { override fun uncaughtException(t: Thread, e: Throwable) { // 에러 원인을 남기기 위해 FirebaseCrashlytics.getInstance().recordException(e) try ..
[Android] isEnabled 로 ScrollView 스크롤 On / Off 시키기 ScrollView의 스크롤 기능을 On / Off 시켜야할 상황이 있어 개발하게 되었습니다. 저 같은 경우엔 MotionLayout의 애니메이션이 끝난 후 Scroll이 가능하도록 개발이 필요했습니다. 추가적인 변수 없이 View의 기본적으로 있는 setEnabled를 사용하고 싶었기 때문에 다음과 같이 개발했습니다. LockableScrollView.kt class LockableScrollView : ScrollView { constructor(context: Context?) : super(context) constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) constructor(context: Context?, ..
자취하면서 해먹은 오믈렛 유튜브에서 자취하는 사람의 회전 오므라이스를 보고 작년에 오믈렛을 시도했던게 생각났다. 그때는 한 번 해보고 실패해서 포기했지만, 이번엔 4일 정도 저녁을 달걀만 먹으면서 시도했다.
[Android] Collapse와 Expand 상태에서 힌트 문자가 다른 TextInputLayout Collapsed 상태일 때와 Expanded 상태일 때 HInt가 다르게 표시되는 디자인 요청이 들어와서 커스텀 뷰로 제작해봤습니다. 동작에 문제가 생기면 업데이트 하겠습니다. build.gradle dependencies { ... implemntation "com.google.android.material:material:$material_version" ... } SwitchTextInputLayout.java import android.content.Context; import android.content.res.TypedArray; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatche..