본문 바로가기

전체 글

(211)
[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인 경우 모두 해당 됩니다. 즉 대응을 하지 않으면 유저들이 알림을 받지 못합니다. 그나마 다행인 부분은 앱이 이미 설치되어 있던 유저들은 권한이 허용된 상태로 적용되어 있고, 신규로 설치하는 유저들만 권한 허용을 받아야 합니다. 언제 권한을 요청하면 좋을까요? 여러 앱을 사용하다 보면 알림 권한뿐만 아니라 모든 권한에 있어서 요청 시점이 재각각 입니다. 앱 실행시 모두 ..
[Android] TargetSdk 33 변경 후 xml 자동완성 기능이 작동 안하는 경우 개요 알람 권한 추가로 인해 OS버전이 13인 디바이스에 권한 요청을 받지 않으면 Notification이 노출되지 않는 문제로 인해 부랴부랴 targetSdk를 33으로 변경하고, 관련 코드를 추가후 배포했습니다. 이후 다른 작업을 진행하는데 xml 자동 완성이 작동하지 않았습니다. 실패한 시도 - 국룰(clean, rebuild) - 프로젝트 캐시 제거 여러개의 프로젝트를 운영하다보니 순간적으로 발생한 상황이라고 생각해 간단한 대처들을 진행했는데 해결되지 않았고, targetSdk 변경으로 인한 문제라고 생각 못했습니다. 성공한 시도 Android Studio를 최신 버전으로 사용하면 정상 작동된다는 글을 발견해 해당 버전(Android Studio Electric Eel | 2022.1.1 RC 3..
점메추 개인정보 처리 방침 1. WONY (이하 "http://superwony.tistory.com/")는 이용자의 개인정보를 매우 중요하게 생각하며 각별히 주의를 기울여 처리하고 있습니다. 2. 정보 주체의 권리, 의무 및 그 행사방법 이용자는 개인정보 주체로서 다음과 같은 권리를 행사할 수 있습니다. ① 정보주체는 ('사이트URL'이하'사이트명) 에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다. 1) 개인정보 열람요구 2) 오류 등이 있을 경우 정정 요구 3) 삭제요구 4) 처리정지 요구 3. 처리하는 개인정보의 항목 작성 ① 은(는) 다음의 개인정보 항목을 처리하고 있습니다. 1) - 선택 항목 android.permission.ACCESS_FINE_LOCATION, android.permis..
[Android] Room 초기 데이터 설정 두가지 방법으로 초기 데이터를 설정할 수 있습니다. 1. addCallback이용 @Database( version = 1, entities = [Food.Item::class, Sort.Item::class, Category.Item::class] ) abstract class DB: RoomDatabase() { abstract fun foodDao(): Food.Dao companion object{ private val databaseName = "recommend.db" private var INSTANCE: DB? = null fun getInstance(context: Context): DB{ return INSTANCE ?: synchronized(DB::class){ INSTANCE ?:..
Android 그림자 색상 변경 먼저 그림자를 사용하는 이유는? 구글 머터리얼 가이드에 따르면 특정 뷰에 그림자 효과를 추가함으로써 집중도를 높일수 있다고 합니다. 실제로 구글이나 많은 앱에서 카드뷰의 형태나, 해당 화면의 핵심 기능을 하는 버튼의 경우 그림자를 추가해 사용자가 쉽게 포커싱 할수 있도록 합니다. 구글 스토어의 카드뷰 형태 ( 왼쪽 ), 제가 운영중인 식물 일기 앱의 식물 추가 버튼 ( 오른쪽 ) 우측 사진과 같이 뷰가 겹치는 경우 그림자 효과를 주지 않으면 버튼이라고 인식하기 어려워 유저에게 불편함을 줍니다. 그림자 속성추가 xml 코드 binding.llGoogle.elevation = 4f 적용 결과 그림자 색상 변경 outlineSpotShadowColor를 이용해 변경 가능합니다. 그 밖의 커스텀 안드로이드에서 ..