TIL

안드로이드/안드로이드

[Android/Kotlin] flatMapLatest 로 리팩토링

필자가 앱을 완료하고 리팩토링을 하는 중이었습니다. override fun getAllBudgetsToFlowWhenBudgetChanged(): Flow = flow { budgetDataSource.getAllBudgetsOrederByDateToFlow().collect { budgets -> val list = budgets.map { budget -> val categoryProceduresList = categoryProceduresDataSource.getAllCategoryProceduresWithBudgetNum(budget.num) val reduce = categoryProceduresList.sumOf { categoryProcedures -> categoryProcedures.pr..

안드로이드/안드로이드

[Android/Kotlin] 알림(Notification) - 2, 알림의 속성

3. Notification의 정보를 입력후 알림을 등록 builder.run { setSmallIcon(R.mipmap.ic_launcher) setWhen(System.currentTimeMillis()) setContentTitle("키워드 알림") setContentText("설정한 키워드에 대한 알림이 도착했습니다!!") setStyle( NotificationCompat.BigTextStyle() .bigText("설정한 키워드에 대한 알림이 도착했습니다!!") ) } manager.notify(NOTIFICATION_ID, builder.build()) Notification 구성 해당 알림은 기본적인 형태의 알림입니다. 작은 아이콘: 필수 구성요소이며 setSmallIcon()을 통해 설정..

안드로이드/안드로이드

[Android/UI] BackGroundTint 값 Hex값으로 설정

여러 뷰들을 사용하다 보면 background를 설정해 놓고 필터처럼 색만 바꾸고 싶을 때가 있습니다. 이럴 때 쓰이는 속성인 BackGroundTint라는 속성값이 있습니다. 필자는 해당값을 xml이아닌 코틀에서 바꿔야 되는 상황을 격었습니다. 이러한 코드들을 찾아보니 viewStateCircleItem.backgroundTintList = when (data.isAvailable) { true -> ColorStateList.valueOf(ContextCompat.getColor(this.root.context, R.color.stateGrean)) else -> ColorStateList.valueOf(ContextCompat.getColor(this.root.context, R.color.gray..

안드로이드/안드로이드

[Android/Kotlin] ViewModel 과 ViewPager

ViewModel은 같은 프래그먼트 끼리 동시에 사용하기 위해서는 private val sharedViewModel: MainSharedViewModel by lazy { ViewModelProvider(requireActivity())[MainSharedViewModel::class.java] } 이런 식으로 프래그먼트에서 액티비티를 불러와서 ViewModelStoreOwner로 지정해 주거나 private val sharedViewModel: MainSharedViewModel by activityViewModels() 위의 방법처럼 activityViewModels()를 사용하는 방법이 있습니다. 이러던 중 공유된 ViewModel의 라이브데이터를 observe를 하는 중 해당 프래그먼트가 켜져있지..

안드로이드/안드로이드

[Android/Kotlin] SharedPreferences

Preference란? 프로그램의 설정 정보 (사용자의 옵션 선택 사항이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용 XML 포맷의 텍스트 파일에 키-값 세트로 정보를 저장 응용 프로그램 내의 액티비티 간에 공유하며, 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있다. 사용법 1. getSharedPreferences (name, mode) 여러 개의 Shared Preference파일들을 사용하는 경우 name : 프레퍼런스 데이터를 저장할 XML 파일의 이름이다. mode : 파일의 공유 모드 - MODE_PRIVATE: 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능 - MODE_WORLD_READABLE, MODE_WORLD_WRITEABL..

안드로이드/안드로이드

[Android/Kotlin] DialogFragment 크기조절

안드로이드에는 커스텀한 다이얼로그를 사용하고 싶어 DialogFragment를 상속받는 새로운 다이얼로그를 만들곤 합니다. 여기서 주의할 점은 해당 다이얼로그의 크기를 제대로 설정을 해주지 않는다면 DialogFragment의 크기때문에 원하는 디자인이 안 나올 수도 있다는 것입니다. 여기서는 2가지 방법으로 크기로 조절할 수 있습니다. xml에 고정된 값주기 FrameLayout 등 뷰그룹을 사용해 감싸주면 원하는 사이즈의 다이얼로그가 노출됩니다. 그렇지만 이 방법의 경우 모든 안드로이드 폰의 화면이전부 다르기 때문에 상대적으로 줄 수는 없다는 점입니다. 코드에서 조절 //in DialogFragment onCreate(){ requireContext().dialogFragmentResize(this,..

안드로이드/안드로이드

[Android/Kotlin] 퍼미션(권한)허용

안드로이드앱에서는 기기에 있는 데이터나 기능들을 접근하기 위해서는 권한을 설정해줘야 합니다. 또한 그권한이 중요한 권한이거나 버전이 올라감에 따라 manifest에 사용하겠다고 알려주더라도 앱에서 또 한 번 사용자에게 이 권한을 사용해도 되는지 물어볼 수 있습니다. ContextCompat.checkSelfPermission함수를 통하여 현재 권한이 있는지 확인할수있으며ActivityCompat.requestPermissions로 안드로이드에서 지원하는 권한용청 다이얼로그를 보여줄 수 있습니다. 그렇지만 거부했을경우 사용자에게 이 부분으로 생길 수 있는 문제를 알릴 필요가 있습니다. 이러한 부분은 ActivityCompat.shouldShowRequestPermissionRationale로 조건문으로 검..

안드로이드/안드로이드

[Android/Kotlin] 리사이클러뷰(RecyclerView) 스와이프 이벤트

안드로이드의 리사이클러뷰에서 스와이프 이벤트를 하는 방법 중 ItemTouchHelper.callback()을 이용할 수 있습니다. 리사이클러뷰에서 스와이프나 드래그등 동작을지원해 해당 동작들을 허용하거나 막을 수 있으며 해당 동작을 했을 때 어떤 이벤트를 발생시킬 것인지 관리할 수 있습니다. 사용법 //적용 //.... userListItemHelper.attachToRecyclerView(recyclerView)//리사이클러뷰와 연결 연결 //구현 class UserListItemHelper(private val requsetPermission:(pos:Int)->(Unit)) : ItemTouchHelper.Callback() { companion object{ private const val TA..

안드로이드/안드로이드

[Android/Kotlin] attachToParent

뷰바인딩에서는 inflate 함수가 2가지 오버로드된 버전으로 제공됩니다. 이 두 가지 버전의 차이는 attachToParent 매개변수의 유무입니다. 다음은 두 가지 버전의 inflate 함수의 예시 코드입니다. //attachToParent 사용 하지 않음 val binding = ActivityMainBinding.inflate(layoutInflater) //attachToParent 사용 val binding = ActivityMainBinding.inflate(layoutInflater, parent, attachToParent = false) 리사이클러뷰에서는 binding을 이용해 뷰홀더를 만드는 과정에서는 해당작업을 할 때는 아래와 같은 inflate 함수를 사용해야 합니다. 만약 그렇지..

안드로이드/안드로이드

[Android/Kotlin] 프래그먼트안 프래그먼트에서 뒤로가기

오늘은 프래그먼트 안에 프래그먼트를 두고 onBackPressed 이벤트가 일어날 때 이전의 프래그먼트로 가게 동작시키고 싶었습니다. 그러기 위해서는 먼저 프래그먼트 안에서 프래그먼트를 바꿔줄 필요가 있었습니다 val fragment1 = Fragment1().getInstance() supportFragmentManager.beginTransaction().replace(R.id.container, fragment1).commit() 기존액티비티에서는 위처럼 supportFragmentManager를 이용하여 프래그먼트를 쉽게 바꿔 줄 수 있었지만 프래그먼트에는 supportFragmentManager가 없기에 다른 매니저를 가져와야 했습니다. /** * Return a private FragmentM..

감자씨앗
'TIL' 태그의 글 목록