Android

이미지 로딩 라이브러리 중 하나인 Colil을 Compose UI에서 로딩 시, 실패했을 경우의 Error를 확인하기 위한 방법입니다. val painter = rememberAsyncImagePainter( model = ImageRequest.Builder(context).data(item.imageUrl) .placeholder(R.drawable.blank_ad).build())인자로 받은 item의 imageUrl을 통해 이미지를 로딩합니다. 물론 manifest에 인터넷 사용 권한이 허가되어 있는지 또한 반드시 체크해 주세요.로딩했는데, placeholder의 Drawable로 표시되면 뭔가 문제가 있는 것이겠지요? val state = painter.statepainter의..
Dialog에서 기존 XML 기반 View에 ComposeView를 병합하는 작업을 진행하던 중에 아래와 같은 오류를 마주쳤습니다.java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from android.widget.FrameLayout{854b4dc V.E...... ......I. 0,0-0,0 #7f0a0897 app:id/rootLy} at androidx.compose.ui.platform.WindowRecomposer_androidKt.createLifecycleAwareWindowRecomposer(WindowRecomposer.android.kt:352) at androidx.compose.ui.platform.Window..
안드로이드에서 Balloon 툴팁 구현하실 때, 아마 알고 계신 분들도 많겠지만 해당 라이브러리를 사용하는 경우가 많습니다.https://github.com/skydoves/Balloon GitHub - skydoves/Balloon: :balloon: Modernized and sophisticated tooltips, fully customizable with an arrow and animations for:balloon: Modernized and sophisticated tooltips, fully customizable with an arrow and animations for Android. - skydoves/Balloongithub.com 기존 View 방식이나 Compose 방식을 모두..
안드로이드에서 mp4 형식의 사용 방법 가이드 영상 파일을 넣어야 하는 작업이 생겼습니다.새로운 화면을 만드는 겸 Compose를 기반으로 mp4 영상을 넣어봤네요. ExoPlayer라는 오픈 소스 미디어 플레이어 라이브러리를 활용했습니다.https://developer.android.com/media/media3/exoplayer/hello-world?hl=ko 시작하기  |  Android media  |  Android Developers이 페이지는 Cloud Translation API를 통해 번역되었습니다. 시작하기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 도움말: 시작하는 또 다른 방법은 ExoPlayer Codedeveloper.android.com 먼저..
안드로이드의 Toast는 기본적으로 텍스트 메시지를 위한 것이며, 사용자 인터랙션(예: 버튼 클릭)을 직접 처리하는 기능을 내장하고 있지 않습니다. 따라서 커스텀 Toast로 버튼을 삽입한다고 하더라도 onClick에 대한 처리가 불가능합니다. 그래도 Toast에 Clickable을 추가하고 싶다면? Custom Dialog를 활용하여 어느 정도 비~슷하게 구현이 가능합니다. 우선 위와 같은 형태로 Custom Dialog 레이아웃 XML 파일을 구성했습니다. 그다음, ClickableToast라는 이름으로 Custom Dialog를 생성합니다. class ClickableToast(private val context: Context, private val text: String) : Dialog(con..
Fatal Exception: java.lang.IllegalArgumentException RemoteViews for widget update exceeds maximum bitmap memory usage (used: 16216160, max: 15940800) 위와 같은 에러가 간혹 Widget에서 Bitmap을 사용할 때 발생합니다. 이전에 관련된 글을 작성했으나 여전히 재발하는 경우가 있어서 더 강화된 로직을 문서를 참고하여 구성했습니다. 거대한 비트맵 처리에 대해서 아래 공식 문서에서 처리 로직을 제안해주고 있습니다. https://developer.android.com/topic/performance/graphics/load-bitmap?hl=ko 큰 비트맵을 효율적으로 로드 | App q..
기존 Realm DB 스키마에 Nullable한 필드를 새로 추가해야 해서 마이그레이션 작업을 진행했습니다. 그런데, 계속 모든 값이 null로 표시되고, 정상적인 데이터 입출력 처리가 안 되는 문제를 발견했습니다. 구글링 해보니 특정 필드를 nullable 하게 처리하려면 아래와 같이 마이그레이션을 진행해야 했습니다. case 19: schema.get("Notification") .addField("notificationId", int.class) .setNullable("notificationId", true); break; 기본적으로 Nullable은 false 처리가 되어있기 때문에 true로 변경해 줍니다. 이후 정상적인 입출력 처리가 가능했습니다.
중국에서는 구글 플레이 스토어가 지원되지 않는다. 중국에서 발매된 안드로이드 디바이스는 구글 플레이 스토어를 사용할 수 없습니다. 이유는 구글이 중국 정부의 검열 문제 때문에 아예 철수를 해버리게 되면서 모든 구글 서비스가 중단되었기 때문입니다. 하지만 바이두로 앱을 전파하는 경우도 있습니다. 이때, 구글 플레이 스토어가 지원되지 않을 경우, Billing 기능을 고려하여 구글 플레이 서비스 사용 가능 여부 확인이 필요한 경우가 있었습니다. 어떻게 해야 그 여부를 확인할 수 있는지 설명하겠습니다. GoogleApiAvailability GoogleApiAvailability 클래스는 Google Play 서비스의 가용성을 확인하고, 필요한 경우 사용자에게 오류를 해결하도록 안내하는 데 사용됩니다. 이 클..
지겹도록 사용하던 Kotlin Extensions를 모두 걷어내고, 기존 XML 기반 프로젝트에 코틀린 버전을 업그레이드하여 Compose를 도입하게 되었습니다! 이번에는 XML 기반 프로젝트에서 중간에 Compose를 끼워 넣는 과정을 설명드리고자 합니다. 코틀린 & Compose 버전 업데이트 제 프로젝트는 코틀린 버전 1.8.0으로 설정되어 있어 해당 버전과 호환이 가능한 Compose 버전 확인이 필요했습니다. 아래 주소에서 각 코틀린 버전에 대한 컴포즈 버전 확인이 가능합니다. 만일 리스트에 없는 버전이라면 코틀린 버전에 대한 업그레이드가 선행되어야 하겠습니다. (만일 1.7.22 코틀린 버전이라면 1.4.0 컴포즈 활용이 가능한 1.8.0 코틀린 버전으로 마이그레이션 해주세요.) https:/..
안드로이드 코틀린 - ViewBinding을 Adapter에 적용하기 Android에서 ViewHolder 기반으로 ViewBinding을 적용할 수 있습니다. inner class ViewHolder(val binding: ItemReviewBinding) : RecyclerView.ViewHolder(binding.root) { init { //TODO: Init UI } } ViewHolder에 직접 Binding 처리를 진행합니다. override fun onCreateViewHolder(parent: ViewGroup, position: Int) = ViewHolder(ItemReviewBinding.inflate(LayoutInflater.from(parent.context), parent, ..
SeungYong.Lee
'Android' 태그의 글 목록