본문 바로가기

Kotlin

(16)
[Kotlin] Android font 적용하기 ## 다이어리 프로젝트 with SandBurger 영어 폰트는 Roboto를 사용하여 추가할 필요가 없지만, 한글 폰트는 Spoqa Han Sans Neo를 사용하여 추가하였다. 폰트 다운로드 링크 : Spoqa Han Sans Neo Spoqa Han Sans Neo Spoqa unveil the new Spoqa Han Sans Neo, which has evolved in many ways. | 여러모로 개선을 거쳐 진화한 스포카 한 산스 네오를 공개합니다. | これまでいろいろ改善して進化した新しいスポカーハンサンスネオ spoqa.github.io res/font font directory 생성 후, 다운로드 받은 폰트 파일을 넣어줍니다. 이때 파일명은 소문자로 해야합니다. app_font.xml 안..
[Kotlin] Custom Dialog 사용하기 ## 다이어리 프로젝트 with SandBurger 디자이너분께서 버튼을 눌렀을 때 위의 이미지처럼 Dialog를 호출하는것을 요청하셔서 AlertDialog를 커스텀하게 됐다. + 2022.07.06 수정 기존에 xml에 적용했던 background 속성을 지우고 alertDialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) dialog 호출 전 위와 같은 코드를 추가해주었다. 여기서 window가 무엇이길래 기존에는 둥글게 보이지 않던 것을 둥글게 보이게 해주는 것인지 궁금하여 찾아보았다. What is an Android window? - Stack Overflow 화면을 가리키는 속성인데 여기서는 alertDialog가 화면..
[Kotlin] CosmoCalendar library 사용하기 ## 다이어리 프로젝트 with SandBurger 종강과 함께 잠시 쉬고있던 프로젝트를 다시 시작했습니다. 프로젝트의 핵심 기능을 구현하기 위해 달력 커스텀이 필요하여 cosmocalendar 라이브러리를 사용하여 구현하였습니다. 동작과정은 아래와 같습니다 일정 추가 화면입니다. 여기서 시작일, 종료일 클릭 시 각각 하단에 calendar가 보이며 날짜를 선택할 수 있고, timePicker를 사용하여 시간 선택을 하게 했습니다. fragment_add_schedule.xml AddScheduleFragment.kt 원하는 날짜를 선택하고 이를 원하는 방식으로 처리하기 위해서는 calendarview.selectedDays를 통해 선택한 날짜를 가져와서 필요한 데이터를 이용하여 처리해야합니다. 제 경우..
[Kotlin] Bottom Navigation Icon Click Event 처리 Flo 클론코딩을 할 때도 그랬지만, Bottom Navigation Bar는 요즘 사용하는 어플에서 빼놓을 수 없는 요소라고 생각한다. 아이콘을 클릭하는 걸로 Fragment가 전환되게끔 하는 코드는 짜봤었지만, 유저가 어느 화면에 위치해 있는지 알기 위해서는 현재 화면의 아이콘만 색상을 변경해줄 필요가 있다고 느꼈다. 그래서 이를 코드로 짜봤다. //menu.xml menu.xml에는 하단에 위치할 아이콘들을 넣어줄 수 있다. 내 경우에는 5개의 아이콘을 사용하기 때문에 item도 5rofmf 만들어줬다. //navigation_my_selector.xml selector를 사용해서 클릭을 하면 아이콘을 ic_menu_my_selected 로 변경하게끔 설정했다. 이렇게 설정하면 아래와 같이 보여지게..
[Kotlin] Parcelize 사용하여 intent에 data class 담아 전달하기 서버에서 받아 온 데이터를 다른 액티비티에 전달하고자 했습니다. 이 과정에서 intent에 data class를 담아 전달하기 위해 방법을 찾던 중 Parcelize에 대해 알게 되었고 이를 사용하여 구현해보았습니다. //build.gradle plugins { id "kotlin-parcelize" } 우선 gradle에 plugin을 추가해줍니다. //TestResponse.kt @Parcelize data class GetTestResponse( @SerializedName("status") val status : String, @SerializedName("body") val body : List? ) : Parcelable @Parcelize data class Test( @SerializedN..
[Kotlin] ViewPager2 사용해서 배너 만들기 어플을 만들다 보면 배너를 만들어야 하는 경우가 생깁니다. 지난 프로젝트에서도 홈 화면에 배너를 만들어야 했는데요, 저는 이를 ViewPager2를 사용해서 구현했습니다. //fragment_home.xml 우선 배너가 들어갈 frament_home에 ViewPager2를 통해 배너의 사이즈를 정해줍니다. //fragment_banner_all.xml //AllBannerFragment.kt class AllBannerFragment : Fragment() { lateinit var binding : FragmentAllBannerBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceS..
[Kotlin] 정규 표현식 사용하여 회원가입 화면 만들기 이번 앱 개발 프로젝트중 회원가입을 구현할 때, 서버측에서 특수문자를 필터링해서 보내주면 좋겠다고 이야기를 했다. 지난 동아리 활동에서 이런 기능은 정규식을 활용한다고 들었던것 같아 이를 활용해 구현해보았다. binding.signupNicknameCheckTv.setOnClickListener { val regex = Regex("[^A-Za-z0-9가-힣]") val result = regex.replace(binding.signupNicknameEt.text.toString(), "") result.filter { !it.isWhitespace() } if(result != binding.signupNicknameEt.text.toString()){ showWarning("공백과 특수문자는 사용이 ..
[Kotlin] Retrofit2 Multipart 이미지와 데이터 보내기 이번 방학 동안 앱런칭 프로젝트를 진행했다. 강의를 듣고 처음 진행하는 프로젝트이기도 했고, 생각했던 기능들을 사용하기 위해서 검색도 많이 하고, 기존 공부했던 자료를 많이 보면서 진행했다. 그 중 가장 시간을 많이 잡아먹었던게 이미지와 데이터를 한번에 보낼 때 interface를 어떻게 짜느냐였는데, 이에 대해 어떻게 했는지 이야기 해보려 한다. 우선 imageList에는 이미지가 여러 장 들어갈 수도, 아예 안 들어갈 수도 있다. 그리고 postData에는 userId, category, title, contents, hashtagList가 들어간다. 이 때 content type이 application/json이어서 postData는 json으로 변환하여 보내주었다. class StoryServic..