반응형
안녕하세요
사실 이런 기능 어케 만들어야 하노..
싶다가, 여러분의 gpt4o mini의 프롬프트 요청 한도는 소중하기에
적는 건데요
https://developer.android.com/develop/ui/views/notifications/badges?hl=ko
여기서는
1. 앱 설치 후 해당 화면(Fragment)의 최초 실행을 감지하는 함수
이구요
당연히 Activity를 앞에 붙이면 Activity에서도 가능하겠구요
fun Fragment.isFirstRun(key: String): Boolean {
val sharedPref = requireActivity().getSharedPreferences("appFragmentPref", Context.MODE_PRIVATE)
val isFirstRun = sharedPref.getBoolean(key, true)
if (isFirstRun) {
sharedPref.edit().putBoolean(key, false).apply()
}
return isFirstRun
}
고 Dialog도 가능하지.. 않을까요? 해서 적어봤더니 정상적으로 작동합니다.
혹시나 앱에서 최초 결제. 최초~ 어떤 AlertDialog창에서 도움말을 처음에 보여줘야 한다?
-> 유용한 기능 ㅋㅋ
class Util(private val activity: FragmentActivity) {
companion object {
const val key = "your_key"
}
private fun AlertDialog.isFirstRun() : Boolean {
val sharedPref = activity.getSharedPreferences("appAlertDialogPref", Context.MODE_PRIVATE)
val isFirstRun = sharedPref.getBoolean(key, true)
if (isFirstRun) {
sharedPref.edit().putBoolean(key, false).apply()
}
return isFirstRun
}
}
2. 뱃지로 알림이나 뭐 여러가지 클릭 확인하기.
뱃지는 그냥 뱃지를 붙여놓을 View에다가 쓰면되는데요.
@OptIn(ExperimentalBadgeUtils::class)
fun Fragment.hideBadgeOnClick(badgeView: View,
containerView: ConstraintLayout,
badgeKey: String,
backgroundColor: Int,
horizontalOffset: Int = 16,
verticalOffset: Int = 12
) : (() -> Unit)? {
val sharedPref = requireActivity().getSharedPreferences("badgePref", Context.MODE_PRIVATE)
val isBadgeVisible = sharedPref.getBoolean(badgeKey, true)
if (isBadgeVisible) {
val badgeDrawable = BadgeDrawable.create(requireContext()).apply {
badgeGravity = BadgeDrawable.TOP_START
this.backgroundColor = backgroundColor
this.horizontalOffset = horizontalOffset // 원하는 가로 간격 (픽셀 단위)
this.verticalOffset =verticalOffset // 원하는 세로 간격 (픽셀 단위)
}
containerView.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
BadgeUtils.attachBadgeDrawable(badgeDrawable, badgeView)
}
return {
BadgeUtils.detachBadgeDrawable(badgeDrawable, badgeView)
sharedPref.edit().putBoolean(badgeKey, false).apply()
Log.v("clickBadge", "badgekey : $badgeKey, clickBadge: ${sharedPref.getBoolean(badgeKey, false)}")
}
}
return null
}
이렇게 뱃지의 최초 클릭을 감지해서 SharedPreferences에 저장하는 함수를 만들어놓구요. class든 object든 상관없구요
위 함수를 보시면 알겠지만
매개변수로
1. view이름
2. view를 감싸고 있는 부모 Layout?
3. SharedPreferences에 쓸 key값
val hideBadgeFunction = hideBadgeOnClick(binding.tvBadge, binding.cl, "${binding.tvBadge.text}", color.Red)
binding.cl.setOnClickListener{
hideBadgeFunction?.invoke()
// ( 클릭리스너에 넣을 로직 ~~ )
}
로 넣었구요
아무튼 이렇게 하면 뱃지가 사라진다는점~
끗
반응형
'개발 > android_kotlin' 카테고리의 다른 글
[ Kotlin ] 라이브러리 의존성 문제 (구버전들) (1) | 2024.11.12 |
---|---|
[ Kotlin ] 그라데이션 xml 등 (0) | 2024.11.12 |
[ Kotlin ] 안드로이드 바차트 MPAndroidchart BarChart Round Shape (0) | 2024.10.12 |
[ Kotlin ] elevation이 -1인 토글그룹버튼 만들기 ( UI / UX 개선 ) (0) | 2024.09.15 |
[ Kotlin ] Adapter 뿌셔보기 1 ( 내 머리가 부셔짐 ) (0) | 2024.08.05 |