728x90
반응형
- [ pinslog/Log.daily() ][Android] 기존 버튼에 ripple 효과주기2023-10-12 22:31:50다음과 같은 버튼이 있다고 하자, enable 상태에 따라 버튼의 색상 (또는 모양)을 다르게 주기 위해 우리는 drawable을 만들어 사용한다. (사진의 위쪽 버튼은 isEnabled = true, 아래쪽 버튼은 isEnabled = false 이다.) 상태에 따라 색상을 다르게 하고 싶으면 가장 상위 요소로 selector를 사용해야 한다. 그런데 이 상태에서 버튼을 클릭할 때 클릭 효과를 주려면 어떡해야할까? 클릭 효과를 줄 때는 ripple 를 사용해 효과를 적용 했었다. android:color -> 효과의 색상을 의미한다. android:effectColor -> 효과의 보조 색상이라는데 난 확인하지 못했다. 31 이상부터 사용가능하다고 한다. android:radius -> 효과가 발생할 ..
- [ Android/Android ][Android] Android FCM 설정2023-10-11 22:55:49Firebase Cloud Messaging 메시지를 안정적으로 무료 전송할 수 있는 크로스 플랫폼 메시징 솔루션 기본 원리 Firebase용 Cloud Functions 또는 앱 서버와 같이 메시지를 작성, 타겟팅, 전송할 수 있는 신뢰할 수 있는 환경 메시지 요청을 수락하는 등 여러 기능을 수행하는 FCM 백엔드는 주제를 통해 메시지 팬아웃을 수행하고 메시지 ID와 같은 메시지 메타데이터를 생성 기기로 타겟팅된 메시지를 라우팅하고, 메시지 전송을 처리하고, 필요한 경우 플랫폼별 구성을 적용 알림이 표시되거나 앱의 포그라운드/백그라운드 상태 및 관련 애플리케이션 로직에 따라 메시지가 처리 수명 주기 흐름 FCM에서 메시지를 수신하도록 기기 등록 클라이언트 앱의 인스턴스가 메시지를 수신하도록 등록하여 앱..
- [ pinslog/Log.daily() ][Kotlin] 마지막 요소를 제거한 리스트를 얻고 싶을 때2023-10-10 22:06:16코틀린의 컬렉션 중 리스트에서 요소를 삭제하는 방법은 다양하다. 이 중에서 나는 마지막 요소를 제거한 리스트를 얻고 싶었다. 이 때 dropLast(n)를 사용하면 된다. 인자로 넘겨주는 n개 만큼 요소가 삭제된 리스트가 다시 반환됨을 확인할 수 있다. val list = mutableListOf(1, 2, 3, 4, 5) val newList = list.dropLast(2) println(newList) // [1, 2, 3]
- [ Do what you want/WW ]WearWeather : 기온별 옷차림을 확인해보세요!2023-10-09 13:26:26올해 목표 중 하나였던 ’두번째 앱 출시하기‘를 목전에 두고 있다. 첫번째 앱을 출시하고 약 1년 만이다. Pair Play : 이름과 맥주소로 손쉽게 페어링하세요!올해 목표 중 하나였던 ‘앱 개발 후 출시하기’를 이루었다. 원래 출시하려던 앱은 아니었지만 (그건 아직도 개발중…눈물) 만든 이유도 좋고, 나름 쓰임새도 좋아 뿌듯하다. 지금부터 홍보를(?www.pinslog.com Pair Play - Google Play 앱손쉬운 블루투스 페어링play.google.com첫번째 앱 Pair Play 와 마찬가지로 대단한 기능을 가진 앱은 아니지만 이번 WW의 경우는 개발을 배우기 전부터? 안드로이드 개발을 배울때부터? 만들어보고 싶었던 거라 감회가 새롭다. 그도 그럴 것이, 실제로 이 프로젝트는 안드로이..
- [ pinslog/Log.daily() ][Android] Dialog 외부 영역 터치 가능하도록 설정하기2023-10-08 12:26:51안드로이드 다이얼로그를 생성하면 기본적으로 다이얼로그 바깥 영역은 터치할 수 없다. 이를 가능하게 하려면 다음과 같이 플래그를 설정/제거해주면 된다. window?.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL) // 바깥 배경이 불투명해지는 것을 막음 window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) 결과 바깥 영역 터치를 가능하게 하고, 배경이 투명해지도록 설정했다. 터치가 가능한지 확인해보기 위해 버튼에 리스너를 달아 클릭 시 토스트가 뜨도록 해봤다. 버튼이 클릭 되는 것을 확인할 수 있다. 공부하며 작성된 글이라 잘못된 정보가 있을 수 있습니다. 말씀해주시면 수정하겠습니다. 감사합..
- [ pinslog ]요즘에는2023-10-07 11:54:24두번째 회사에 다닌지도 벌써 7개월이 다되어 간다. 요즘에는 사정상 개발보다는 외적인 일을 활발하게 하고 있는데...(각종 인증) 그래서일까 코드 볼 기회가 생기면 그렇게 소중할 수가 없다. ㅋㅋ 벌써 개발 일을 한지도 1년을 훌쩍 넘기고...2년을 바라보고 있는데 한번씩 뒤를 돌아보자면 똑바른 길을 걸어왔는가에 대한 의문이 들곤한다. 어떤 개발자가 그렇지 않겠냐만은 많은 고민이 드는 것도 사실이고... 이 고민은 나에 대한 의심에서부터 비롯된 것인가..하는 근본적인 고뇌도 빼놓을 수 없다. 암튼 이래저래 고민과 걱정이 많은 시기다. 그럴수록 내가 할 수 있는 것들에 집중해야한다고 생각하기 때문에! 나는 또 내가 할 수 있는 것들을 행하려고 한다. 그렇게 사이드 프로젝트 하나를 마무리 지어서, 플레이스토..
- [ Android/Android ][Android] Jetpack Compose 프로젝트 생성 + MainActivity 살펴보기2023-10-06 23:14:55기존 프로젝트와의 차이 build.gradle (:app) android { ... buildFeatures { compose true } } 폴더 구조 앱을 만들기 위한 리소스 (컬러, 테마 등) 가 res/values 가 아니라 패키지/ui 에 존재한다. 리소스에 접근하기 위해 xml에 접근하는 것이 아니라 kotlin 코드로 리소스를 생성하고, 접근할 수 있음을 의미한다. MainActivity xml 방식 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_m..
- [ Android/Android ][Android] Thread와 Coroutine2023-10-05 22:40:08val list = mutableListOf("포도", "메론", "딸기", "사과", "바나나") CoroutineScope(Dispatchers.Main).launch { list.forEach { item -> if (item == "딸기") { list.remove(item) Log.d(TAG, "1. ${list}") } } } CoroutineScope(Dispatchers.IO).launch { list.forEach { item -> if (item == "바나나") { list.remove(item) list.add("자두") Log.d(TAG, "2. ${list}") } } } /* 2023-04-03 21:19:20.540 2. [포도, 메론, 딸기, 사과, 자두] 2023-04-0..
728x90
반응형