전체 글71 [Android] BottomSheetDialog 사용하기 BottomSheetDialog는 하단에서 나타나는 Dialog로 xml을 통해 자신이 사용하고자 하는 데로 커스텀할 수 있다. 기본적으로 Dialog를 띄우려는 곳에 BottomSheetDialog의 객체를 만들어서 종속된 메서드들을 사용하면 되지만, 여러 화면에서 공용으로 사용하고 싶다면 BottomSheetDialog를 Builder 패턴의 클래스로 만들어 사용하는게 좋다고 생각한다. 예제로 버튼을 누르면 BottomSheetDialog를 띄우고 '취소' 버튼을 누르면 Dialog를 내리고, '확인' 버튼을 누르면 Toast를 띄우려고 한다. Builder 패턴을 사용한 Dialog 클래스 만들기 class CustomBottomSheetDialog(context: Context) : BottomS.. Android/Dialog 2022. 11. 21. [Android] SharedPreferences로 검색 리스트 만들기 [Android] SharedPreferences에 ArrayList로 저장하기 안드로이드에서 가벼운 데이터를 저장하기 위해 SharedPreferences를 사용하곤 한다. ShardPreferences는 key-value 형태로 기기에 데이터를 저장된다. value에는 String, Int, Boolean과 같은 자료형들을 담을 수 ogyong.tistory.com 저번에 SharedPreferences에 ArrayList로 저장하는 것을 해봤는데, 이것을 활용해서 검색 리스트를 만들어보려고 한다. 검색 리스트는 RecyclerView로 표현할 거고, 검색 완료를 했을 때 Adapter에 있는 리스트를 갱신할 것이다. Adapter 작업 class SearchListAdapter: RecyclerVi.. Android/SharedPreferences 2022. 11. 21. [Android] ViewPager2로 TabLayout 구성하기 한 화면에 여러 콘텐츠를 보여주기 위해 다양한 앱에서 TabLayout과 ViewPager를 사용한다. 이 두 가지 기능을 사용하면 탭을 클릭하거나 스와이프를 하여 콘텐츠를 변경할 수 있다. TabLayoutMediator를 사용하여 해당 기능을 구현해 보려고 한다. 예제로 4개의 탭에 각 탭을 구분할 수 있도록 '첫번째' ~ '네번째'라고 텍스트가 적힌 프로젝트를 만들어봤다. TabLayout 설정 /** * TabLayout 설정 */ private fun faqTabInit() { TabLayoutMediator(mBinding.tabMain, mBinding.vpMain) { tab, pos -> tab.text = pos.toString() when (pos) { 0 -> tab.text = g.. Android/TabLayout 2022. 11. 21. [Android] Unsupported Modules Detected 패키지 명을 변경한 것을 적용하기 위해 build.gradle(:app)에서 applicationId를 변경하고 sync를 했는데, Unsupported Modules Detected: Compilation is not supported for following modules: . Unfortunately you can't have non-Gradle Java modules and Android-Gradle modules in one project. 라는 에러가 발생했다. 이상하게 빌드는 성공했는데 Binding을 import 하는 부분부터 빨간줄이 사라지지 않았다. Clean Project와 Rebuild Project를 해도 사라지지 않았는데, 해당 프로젝트의 .idea 폴더를 삭제하고 안드로이드 스.. Android/이슈 처리 2022. 11. 21. [Android] Fragment 하나로 TabLayout 구성하기 보통 TabLayout을 사용할 때 ViewPager를 쓰곤 하는데, ViewPager를 사용하려면 노출할 화면 수만큼 Fragment를 만들어야 한다. 그런데 각 화면들의 구성이 똑같다면 굳이 여러 개의 Fragment를 만들지 않고 하나의 Fragment를 재활용하는 것이 낫다고 생각했다. 탭을 클릭했을 때 beginTransaction으로 Fragment을 생성하고 데이터만 바꿔주면 된다. 예제로 4개의 탭에 각 탭을 구분할 수 있도록 '첫번째' ~ '네번째'라고 텍스트가 적힌 프로젝트를 만들어봤다. TabLayout에 탭 세팅 mBinding.tabMain.addTab(mBinding.tabMain.newTab().setText("첫번째")) mBinding.tabMain.addTab(mBindi.. Android/TabLayout 2022. 11. 20. [Android] RecyclerView Drag and Drop 구현하기 RecyclerView에서 Drag and Drop을 사용하려면 ItemTouchHelper를 사용해야 한다. ItemTouchHelper는 RecyclerView에 Drag and Drop과 Swipe를 지원하는 유틸리티 클래스다. ItemTouchHelper 객체를 RecyclerView에 연결하고 interface에 정의한 drag 관련 메서드들을 override하여 Drag and Drop을 할 수 있다. Interface 정의 // Adapter에서 사용할 interface interface ItemMoveListener { // Drag 처리를 위한 메서드 fun onItemMove(fromPosition: Int, toPosition: Int): Boolean // Drop 처리를 위한 메서.. Android/RecyclerView 2022. 11. 18. [Android] SharedPreferences에 ArrayList로 저장하기 안드로이드에서 가벼운 데이터를 저장하기 위해 SharedPreferences를 사용하곤 한다. ShardPreferences는 key-value 형태로 기기에 데이터를 저장된다. value에는 String, Int, Boolean과 같은 자료형들을 담을 수 있다. 그러면 list(array)의 경우 어떻게 해야 할까? list를 json 형식의 string으로 변환하여 저장하고, 사용할 때는 json 형식의 string을 list로 변환하여 사용해야 한다. 이 동작을 Gson 라이브러리를 통해 쉽게 할 수 있다. SharedPreferences에 ArrayList로 데이터 저장하기 EditText에 텍스트를 입력을 완료하면 현재 날짜와 입력한 텍스트를 ArrayList로 변환하여 기기에 저장하려 한다. .. Android/SharedPreferences 2022. 11. 16. [Android] 카메라 캡처(촬영)하기 - CameraX ˙ ImageCapture [Android] 카메라 미리보기 - CameraX · PreviewView 앱에 카메라 기능을 추가하려는 경우 CameraX와 Camera2를 사용할 수 있다. CameraX는 Camera2 패키지를 기반으로 만들어진 Jetpack 라이브러리로, API가 Camera2보다 훨씬 단순하고 기기 호환성 문제가 없어 ogyong.tistory.com 카메라 미리보기에 이어서 카메라 캡처를 해보려 한다. 간단하게 '캡처하기' 버튼을 클릭하면 ImageView에 해당 이미지를 보여주고, '다시찍기' 버튼을 클릭하면 초기화면으로 돌아가는 앱을 만들었다. 카메라 캡처(촬영)하기 예제 카메라 캡처를 하기 위해서는 ImageCapture의 takePicture를 사용해야 한다. takePicture는 캡처된 이미지를 .. Android/Camera 2022. 11. 14. [Android] 카메라 미리보기 - CameraX · PreviewView 앱에 카메라 기능을 추가하려는 경우 CameraX와 Camera2를 사용할 수 있다. CameraX는 Camera2 패키지를 기반으로 만들어진 Jetpack 라이브러리로, API가 Camera2보다 훨씬 단순하고 기기 호환성 문제가 없어서 안드로이드에서 권장하고 있다. (Camera2는 복잡한 작업을 할 때 사용한다고 한다.) 참고 CameraX를 사용하여 카메라 화면을 보기 위해서 PreviewView를 사용해야 한다. PreviewView는 화면을 유연하게(자르기, 크기 조정, 회전 등) 표시할 수 있는 View이다. 카메라 미리보기 예제 CamreaX와 PrevieView를 사용하여 화면에 미리보기를 띄우려고 한다. 1. gradle에 CameraX 의존성 추가 2. 카메라 권한 Manifest에 .. Android/Camera 2022. 11. 9. [Android] 권한(Permission) 처리하기 Android 5.1 버전 이하에서는 앱의 설치 단계에서만 사용자에게 권한을 요청한다. 개별적으로 권한을 선택할 수 없어서 앱을 사용하기 위해서 요청된 묶음 권한에 대해 감수할 수밖에 없었다. 또한 사용자가 앱 사용 중 어느 타이밍에 해당 권한을 사용하는지 확실히 알 수 없어서 약간의 찝찝한(불안한)을 가질 수밖에 없었다. 하지만 Android 6.0 버전부터 앱 실행 중 사용자에게 권한을(런타임 권한) 요청할 수 있는 기능이 추가됐다. 사용자의 입장에서 어떤 동작을 할 때 권한 요청을 받기 때문에 이 권한이 왜 필요한지 이유를 알 수 있다. (사용자가 편안함을 느낀다고 한다.) 안드로이드 버전이 업데이트될 때 어떤 기능에 대해서 권한을 체크하도록 추가되는 경우가 있다. 예를 들어 Android 12 버.. Android/Permission 2022. 11. 7. [Android] RecyclerView 클릭 이벤트 처리하기 RecyclerView의 Item을 클릭할 때 intent나 api 호출 등을 Adapter에서 처리한다고 번거로웠던 적이 있다. 이럴 때 interface를 통해 Activity나 Fragment에서 클릭 이벤트를 처리할 수 있다. 1. Interface 생성 2. Adapter에서 Interface에 대한 객체를 생성 및 초기화 3. Activity 또는 Fragment에서 override 하여 사용 예제로 아이템을 클릭했을 때 해당 아이템의 텍스트를 토스트로 띄워보려고 한다. 인터페이스 생성 interface SetOnClickListenerInterface { fun listItemClickListener(itemData: String, binding: ItemListMainBinding) } 리.. Android/RecyclerView 2022. 11. 2. 이전 1 ··· 3 4 5 6 다음