본문 바로가기

안드로이드

(166)
[Android] ScrollView in Recyclerview ( 이중 스크롤 구현 ) 이중 스크롤 구현 방법은 크게 2가지로 두개 이상의 스크롤 되는 뷰를 하나의 스크롤로 자연스럽게 보여지게 하는 방법과 스크롤 뷰 안에서 독립적으로 스크롤이 가능하도록 하는 방법이 있습니다. 첫번째 경우 ScrollView가 부모 뷰고 Recyclerview가 있는 구조가 대표적인 예로 NestedScrollView로 간단하게 처리할 수 있고 사용자가 보기엔 하나의 스크롤 되는 화면으로 인식됩니다. ( 해당 포스팅에선 다루지 않습니다. ) 두번째 경우는 결제 페이지 같이 일반적으로 긴 화면에서 구매 약관등의 추가적인 긴 내용을 보여줄때 사용했었습니다. 뎁스로 나뉘어서 노출해도 되지만 법률 관련 권고 사항(추측)을 준수해야 할 경우, UX보단 정보 전달이 우선이기 때문입니다. 상위 뷰 터치 제한 하위 스크롤..
[Android] 구글 로그인 연동 '구글 로그인 연동' 자주 하지 않지만 프로젝트 시작하면 많이 찾게되는 키워드.. 그래서 헷갈릴때가 많아 다시 한번 정리 합니다! 구글 로그인은 크게 2가지로 구분 됩니다. 파베를 이용한 연동 vs Google Cloud Api를 연동 서버가 없는 경우 파베를 이용하면 회원 관리도 직접할 수 있는 어드민 기능을 제공하고 연동 방식도 조금 더 간단합니다. Google Cloud Api 연동은 서버가 따로 있을 경우 이용하는 방식으로 클라이언트에서 구글 idToken을 발급받아 서버로 전송하면, 서버에선 전달 받은 idToken으로 유저의 정보를 얻고 그걸 토대로 각 서비스의 AccessToken을 발급해줍니다. = AccessToken : 서비스 ( 앱 ) 이용시 필요한 유저 인증 정보 해당 포스팅은 Cl..
[Android] 폴더블 대응기 폴더블폰을 사용해 보면서 운영중인 앱이 잘 동작하는지 아래 2가지를 중점적으로 확인했습니다. 1. 접거나 펼쳤을때 보던 화면이 동일하게 보여지는지 2. 펼쳤을때 화면을 효율적으로 활용하는 방법 ( ex 카톡 : 채팅 리스트와 상세를 한 화면에 ) 커버 화면에서 앱 계속 사용 먼저 펼쳤을땐 괜찮은데 접었을땐 앱이 유지되지 않고 잠금화면이 노출 되는 현상이 있었습니다. 먼저 접었을때 보던 앱 화면이 유지되려면 디바이스 설정을 확인해야 합니다. '설정 > 디스플레이 > 커버 화면에서 앱 계속 사용 ' '크기 조절이 지원되지 않음' 으로 표시되어 있는 경우 AndroidManifest.xml에 resizeableActivity 옵션을 아래처럼 변경해야 합니다. 디바이스 설정을 변경하지 않고 폴더블 설정을 완료하..
[Android] Flipper로 네트워크 디버깅 Stetho를 보내며 내부 디비나 네트워크 디버깅 할때 잘 사용하고 있었는데 어느 순간부터 chrome 브라우저에선 사용이 어려워, Edge 브라우저로 사용하고 있었는데 이마저도 기기 인식을 못할때가 많아 힘들었는데 이젠 이마저도 인식이 되지 않네요... Flipper Facebook에서 만든 Flipper를 많이 사용하고들 계시더라구요 Stetho가 웹 친화적이였다면 Flipper는 보다 앱에 친화적인 툴 같아서 도입하게 됐습니다! 설치 공식 사이트에서 각 플랫폼에 맞는걸 설치하면 됩니다. 맥의 경우 설치가 안될때 '시스템 환경설정 > 보안 및 개인 정보 보호' 에 가셔서 'Flipper' 열기를 누르시면 됩니다. 설치 됐을때 플랫폼을 선택하는데 iOS는 필요 없어서 OFF 했습니다. Android S..
[Android] 특정 위치로 스크롤 하기 ScrollView하위 뷰중 특정 뷰로 스크롤 되도록 하는 기능을 구현했습니다. 먼저 제가 작업한 뷰의 구조는 아래 사진과 같습니다. 타이틀과 백버튼이 있는 Top 영역과 그 아래 컨텐츠를 담고 있는 ScrollView 로 이루어진 간단한 엑티비티 입니다. 방식은 간단하게 특정 뷰가 화면내 어떤 위치에 위치하고 있는지 좌표를 구하고 그 좌표 만큼 스크롤 합니다. view.getLocationOnScreen(outLocation: IntArray) 특정뷰 상단이 스크롤뷰 상단에 걸리도록 private fun scrollToView(view: View){ var statusBarHeight = CommonViewUtil.getStatusBarHeight(context = this) val viewLocati..
[Android] 다크 테마 적용하기 Android 10 ( API 29 ) 부터 제공되어 여러 장점을 가지고 있습니다. - 전력 사용량을 절약 - 시력이 낮거나 밝은 빛에 민감한 유저의 가시성 개선 - 한낮에 직사광선에 노출되는 경우 가시성 개선 다크 테마는 디바이스뿐만 아니라 각 앱 별로도 설정이 가능합니다. 기본적으로 앱에는 디바이스 테마를 따라가도록 되어 있지만 설정 값을 제공하는 앱들을 간혹 보신적이 있으실 겁니다. 예시 아래 앱은 제가 운영중인 톡썰만들기 앱입니다. 꼭 필요한가? 그렇진 않습니다. 하지만 있다면 플러스 요인인건 맞다고 생각합니다. 저도 디바이스 다크모드를 사용하지 않기 때문에 필요성을 못 느꼈지만 유저의 요구 사항이 있어 추가하게 됐습니다. 다크 테마 적용 아래 코드를 테마설정하는 화면과, 앱 시작하는 화면에 추가..
[Android] 룰렛 구현하기 최근에 [점메추] 앱에서 메뉴를 추천하기 위한 방식중 하나로 개발을 했는데 아쉽게 실 버전엔 포함되지 못했습니다. 결과 화면 개발 방식 라이브러리도 있지만 커스텀하기 용이한 점과 개발 해보고 싶었던 마음이 있어 캔버스에 직접 그리는 방식으로 했습니다. Roulette.kt 룰렛을 한 화면에서만 사용하지만 관리가 용이해 커스텀 뷰로 만들었습니다. @SuppressLint("DrawAllocation") override fun onDraw(canvas: Canvas?) { super.onDraw(canvas) if (canvas == null) return val rectLeft = left + paddingLeft + Constant.DEFAULT_PADDING val rectRight = right - ..
[Android] OS 13 알림 권한 대응 기존 안드로이드 앱에서 Notification(푸시)를 유저의 동의 없이 띄울 수 있었지만 OS13 버전에 알람 권한이 새로 추가 됐습니다. ( 공식문서 ) 발 빠르게 적용 해야 하는 이유 ! 내부 저장소에 대한 권한과 같이 대응이 필요한 사항에 있어선 TargetSdk 버전에 따라 대응이 필요했지만 알림 권한은 유저 기기의 OS가 13인 경우 모두 해당 됩니다. 즉 대응을 하지 않으면 유저들이 알림을 받지 못합니다. 그나마 다행인 부분은 앱이 이미 설치되어 있던 유저들은 권한이 허용된 상태로 적용되어 있고, 신규로 설치하는 유저들만 권한 허용을 받아야 합니다. 언제 권한을 요청하면 좋을까요? 여러 앱을 사용하다 보면 알림 권한뿐만 아니라 모든 권한에 있어서 요청 시점이 재각각 입니다. 앱 실행시 모두 ..