본문 바로가기

전체보기

(211)
[ AOS ] - Snack bar bottom margin not working Toast -> Snack Bar 변경 작업을 진행하면서 액션 버튼이나 하단 탭으로 인해 화면에 따른 Snack Bar 하단에 마진을 줘 특정 버튼을 가리지 않아야 했습니다. Snack Bar 구현은 해당 포스팅을 참고해주세요 ! [AOS] SnackBar vs Toast 토스트나 스낵바는 가벼운 메세지를 유저에게 전달할때 주로 사용하는데 장단점이 명확해 상황에 맞게 사용하면 좋을것 같습니다. 로그인 화면에서 아이디를 입력하지 않고 로그인 버튼을 눌 superwony.tistory.com 바텀의 마진을 주는 방법 코드를 찾아 새로운 프로젝트를 만들어서 테스트 했을땐 작동 했지만 기존 플젝에 추가하니 작동하지 않았습니다. val snackbarLayout = snackbar.view as Snackbar...
[AOS] Targeting S+ ( export 선언 ) 에러 대응 안드로이드 TargetSdk31로 변경할 경우 권장되는 사항들이 있습니다. 해당 포스팅에서는 export 선언시 발생했던 문제와 해결 방법을 다루며 자세한 사항은 공식 문서를 참고해주세요. export 설정은 엑티비티나 서비스등에 설정해주는 값으로 AndroidManifest.xml에서 선언하며 엑티비티등이 외부 앱으로부터 호출을 허락하는 경우 true, 그렇지 않은 경우 false로 설정합니다. 인텐트 필터의 경우 false로 설정하면 안되고 설정할 경우 해당 앱을 호출할경우 ActivityNotFoundException이 발생하니 주의 해주세요! 코드 에러 사용중인 엑티비티와 서비스에 위와 같이 모두 선언해줬는데도 여전히 빌드시 에러는 발생했습니다. 한번더 꼼꼼히 보고 비어있던곳에 추가했는데도 에러가..
[AOS] Room 사용시 이미지 비트맵으로 저장하기 이미지 저장시 Bitmap으로 저장하면 백업 파일을 만들어 디바이스간 데이터 이동 기능을 구현할 수 있습니다. 저는 백업 기능을 염두에 두지 않고 작업하다 보니 앱 내부 스토리지에 저장된 이미지의 경로를 저장하는 방식을 사용했습니다. 앱 전용 내부 디비가 있어서 사진첩에서 사진을 지워도 이미지는 보존되지만 앱을 삭제하면 되돌릴수 없기 때문에 필요에 맞게 선택하시면 될것 같습니다. Plant Table @Entity(tableName = "plant") data class Item( @PrimaryKey(autoGenerate = true) var id: Long? = null, var name: String = "", var nickName: String = "", var image: Bitmap? = ..
[iOS] UILabel에 클릭 이벤트 붙이기 AOS로 클릭 이벤트를 구현할땐 상황에 맞게 View, TextView등 다양한 오브젝트를 활용해서 레이아웃을 그리고 거기에 간단하게 클릭이벤트를 붙입니다. 하지만 iOS는 버튼에만 IBAction을 사용해서 편리하게 붙일 수 있고 그 외엔 'TapGesture'를 붙여야 합니다. class ViewController: UIViewController { @IBOutlet weak var view: UILabel! override func viewDidLoad() { super.viewDidLoad() // 포인트 구매 let buyPoint = UITapGestureRecognizer(target: self, action: #selector(clickPoint)) view.addGestureRecogni..
[AOS] 서드파티 앱을 이용하여 이메일 전송하기 & 앱내 문의하기 기능 구현 제가 운영하는 개인 앱에는 이용하면서 겪은 불편함을 이메일을 통해서 받구 있습니다. 별도 페이지를 작성해서 자세한 정보들을 받을 수도 있지만 서버를 별도로 운영하지 않기 때문에 이메일 방법을 선택했고, 생각보다 많은 사용자들이 불편함과 건의사항들을 보내주셔서 다음 개발 기능 및 예상치 못한 버그들을 잡는데 유용하게 쓰고 있습니다. 아직 구현하지 않으신분들은 구현을 강력 추천합니다! 이메일 전송 기능 실제 운영중인 앱에 캡쳐 화면으로 '[개발자에게 문의하기]'를 클릭 했을때 사진입니다. 문의시 받는 이메일 주소와 제목이등 필요 내용을 자동으로 입력된 상태로 사용자에게 노출됨으로써 불편함을 최소화 했습니다. private fun sendInquiryEmail() { try { var intent = Inte..
[AOS] Retrofit Response 동적 파라미터 Type으로 받기 서버 통신 응답 결과를 저장하는 DTO를 생성할땐 일반적으로 타입과 이름이 명시적입니다. data class UserRes( val email: String?, val name: String? ) 하지만 어떤 타입인지 모르거나 필드명을 모를 경우엔 어떻게 해야할까요? 서버측에서 필드명과 값들을 String으로 통일시켜서 내려주면 String으로만 받아서 사용하면 되지만 운영하는 서비스가 앱 포함 여러가지일 경우, 개발 스타일등의 이유로 저처럼 다이나믹한 결과값을 대응해야 하는 경우가 있습니다. 예를들어 유저가 종류가 다양하여 직군 별로 테이블에서 필드명을 관리한다고 가정했을때 각 직군 별로 있는 일치하는 필드가 있고 그렇지 않은 필드들이 있을 수 있습니다. 그렇기 때문에 데이터를 응답받을땐 직군별 필드키..
[AOS] GA4 적용하기 - 개념 GA(Google Analytics)는 많은 기업에서 사용자의 패턴을 분석하고 마케팅 효과를 확인하는등의 용도로 사용중입니다. 저도 기존에 사용중이였지만 보다 똑똑하게 사용하기 위해 공부한 내용을 공유하고자 포스팅합니다. ( 공부한 내용을 정리하는 포스팅이다보니 부정확한 정보들이 많을 수 있습니다. 참고해서 봐주세요 ) 틀린 부분이 있으면 편안하게 말씀해주시면 정정하도록 하겠습니다. GA4란? 20년 10월쯤 새로 출시된 버전으로 기존버전은 UA(Universal Analytics) 로 칭합니다. GA4 vs UA GA4의 큰 변화는 데이터 구조와 데이터 수집 로직이 달라졌다. GA3는 세션 기반, GA4는 유저, 이벤트 기반입니다. 세션이란 ? 유저가 한번 방문을 하고 방문을 종료했을때 까지 시간을 의..
[AOS] SnackBar vs Toast 토스트나 스낵바는 가벼운 메세지를 유저에게 전달할때 주로 사용하는데 장단점이 명확해 상황에 맞게 사용하면 좋을것 같습니다. 로그인 화면에서 아이디를 입력하지 않고 로그인 버튼을 눌렀을때 '아이디를 입력해주세요' 와 같은 메세지를 전달할때 간략히 차이점 먼저 공유드리면 아래와 같습니다. 보다 세세한 내용은 밑에 서술된 내용을 참고해주세요 스낵바 토스트 화면 크기 변동시 위치 변화 유동적 고정적 클릭 이벤트 작동 여부 작동 비작동 노출 영역 현재 엑티비티 디바이스 화면 기본 사용 아래는 기본적으로 제공하는걸 사용했을때 사진입니다. 레이아웃이 다르지만 둘다 커스텀을 할 수 있어서 크게 신경쓰지 않아도 되지만, 노출되어 있는 상태에서 키보드가 호출됐을때 처리는 다릅니다. 스낵바는 화면의 크기가 변함에 따라 위치..