All

- 다음과 같은 NestedScrollView를 화면에서 사용할 때, 사용자 편의성을 위해 최상단으로 한 번에 스크롤하는 기능이 필요할 때가 있다. - 그럴 때에 다음 scrollTo 함수를 사용해주면 된다.//스무스하게 이동fun scrollToTop() = with(binding) { scrollView.post { scrollView.smoothScrollTo(0, 0) }}//즉시 이동fun scrollToTopInstantly(scrollView: NestedScrollView) { scrollView.post { scrollView.scrollTo(0, 0) }}
- 내가 편하게 쓰려고 메모장 앱을 간단하게 만들고 있는데, 외부 웹 사이트에서 링크를 쉽게 공유하고 싶어 내 앱으로의 Intent 공유 기능을 활성화했다. - 과정은 다음과 같다. 일단 Intent로 공유받는 데이터를 수신할 Activity를 하나 생성해 준다.class ReceiveShareActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val sharedUrl = if (intent?.action == Intent.ACTION_SEND && intent.type == "text/plain") { ..
- Glance에서 어떤 동작을 수행하고 나서 위젯을 업데이트하기 위해 아래와 같은 로직을 호출했다.CoroutineScope(Dispatchers.IO).launch { val manager = GlanceAppWidgetManager(context) widgetList.forEach { (widgetClass, stateKey) -> val glanceIds = manager.getGlanceIds(widgetClass) val widgetInstance = widgetClass.getDeclaredConstructor().newInstance() glanceIds.forEach { glanceId -> widgetInstance.u..
- api 호출을 로그캣으로 일일이 보는 게 번거롭고 불편하다면 여러 가지 방법으로 통신 내역을 확인할 수 있는 방법들이 있다. - 오늘은 그 중 하나로 프록시맨 간단히 소개https://proxyman.com/ Proxyman · Debug, intercept & mock HTTP with ProxymanNarrow down your search with Proxyman's Multiple Filters. You can combine complex filtered criteria like Protocol, Content-Type, URL, Request Header, Response Header, Body, etc that find exact what you're looking for.proxyman...
- 안드로이드 Glance에서 특정 화면을 열거나 로직을 수행하기 위해서는 GlanceModifier.onClick()에 Action을 명시해주어야 한다. - Glance의 Action은 UI 요소에 "동작"을 연결하는 역할을 하는 개념이다.위젯에서 특정 Activity 열기- 먼저 Glance에서 특정 화면을 열기 위해 ActionIntent는 아래와 같이 사용한다.modifier = GlanceModifier .size(20.dp) .clickable(onClick = actionStartActivity( Intent(context, WidgetSettingsActivity::class.java).apply { data = Uri.parse(KEY_WIDGE..
- 위젯을 구현하다 보면 사이즈 별로 다른 레이아웃을 제공하거나 높이 너비에 따라 View의 구성이 달라지는 구현을 필요로 할 때가 있다. - 기존 RemoteViews에서는 AppWidgetInfo에 접근하여 사이즈 값에 대해 확인했으나 Glance에서는 좀 다르다.appWidgetManager.getAppWidgetInfo(appWidgetId).minHeight - SizeMode 라는 값을 통해 위젯 크기 변화에 따른 레이아웃 구성 대응이 가능하다. - SizeMode는 Glance 위젯이 시스템에서 요구하는 사이즈 정보의 유연성을 어떻게 처리할지를 정의한다.sealed interface SizeMode { /** * The [GlanceAppWidget] provides a sing..
- 코틀린 코드로 XML 뷰 높이를 조절하는 코드val heightInPx = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, myViewHeight, myView.context.resources.displayMetrics).toInt()myView.updateLayoutParams { height = heightInPx }- dp 값을 px로 변환 후에 androidx.core.view.updateLayoutParams를 import 하여 LayoutParams에 접근한다.
- 구독형 상품에는 만료일이 존재한다.- 우리가 넷플릭스 같은 구독형 서비스를 첫 결제한 일자 + 1달 / 1년 정도가 보통 이번 구독 만료일이다. - 그리고 사용자가 만일 구독을 중단하고 싶으면 플레이 스토어에서 정기 결제 취소를 진행하는데, 이때 서비스에서는 사용자가 이탈하지 않도록 재구독을 권하는 로직을 구성할 수도 있다. - 이때 인앱 결제 영수증으로부터 ExpiredTime 데이터를 가져와서 처리함 - 그래서 재구독 버튼을 만들던 무언가 UIUX를 구성하는데, 이 재구독 기능은 특별히 구글 인앱 결제 모듈에 따로 구분이 되어있지는 않다. - 단순히 사용자가 이용하던 구독 상품 ID를 찾고, 해당 상품의 결제 로직을 다시 호출하면 된다.fun checkUnConfirmedPurchases( ..
· Knowledge/IT
- 요즘 핫한 MCP 보고 듣기는 많이 했지만 직접 설치하고 진행해 본 적은 없어서 정리해 봤다. - MCP에 대한 이론적 개념은 나중에 정리.. 간단히 말해서 AI 모델이 다양한 외부 데이터를 활용할 수 있도록 연결해 주는 표준화된 방법이다. - 피그마를 연결해서 데이터를 생성하는 것이다. https://www.cursor.com/ Cursor - The AI Code EditorBuilt to make you extraordinarily productive, Cursor is the best way to code with AI.www.cursor.com- 일단 Cursor 다운로드 및 회원 가입을 진행해 준다. - 아래 레포지토리에서 zip 파일을 다운로드하여 내 문서 하위에 압축 해제해 준다.ht..
- 프로젝트에서 사용하던 SVG 리소스들이 전면적으로 개편되어 수많은 리소스들을 전부 교체해야 하는 상황이 생겼다. - 원래 drawable - vector Image 추가로 일일이 넣긴했는데, 굳이 그럴 필요 없고 ResourceManager를 사용하면된다.- ResourceManager에서 Drawables Import를 클릭하여 원하는 폴더를 선택 후 등록한다.
SeungYong.Lee
'분류 전체보기' 카테고리의 글 목록