Android50 [Android] EncryptedSharedPreferences로 암호화 하기 SharedPreferences로 기기 내에 간단한 데이터를 저장하곤 하는데, 데이터가 실명이나 핸드폰 번호와 같은 개인 정보라면 암호화하여 저장할 필요가 있다. 처음 기기에 저장을 할 때 value를 암호화하여 저장할 수 있지만, 안드로이드에서는 EncryptedSharedPreferences를 제공한다. EncryptedSharedPreferences는 MasterKey를 이용하여 암호화된 SharedPreferences 객체를 생성한다. 예제로 EditText에 입력한 텍스트를 암호화하여 저장하고 불러오기 버튼을 통해 저장된 value를 TextView로 보여주려고 한다. 참고 자료 EncryptedSharedPreferences 의존성 추가 // EncryptedSharedPreferences i.. Android/SharedPreferences 2022. 11. 24. [Android] TextWatcher로 텍스트 변경될 때마다 이벤트 처리하기 앱에서 텍스트를 입력 중에 무언가 잘못되었다고('잘못된 입력 형식' 문구 또는 에러 ui 표시) 사용자에게 알려주는 것을 본 적이 있을 것이다. 안드로이드에서 TextWatcher라는 인터페이스를 제공하는데 TextWatcher에 정의된 메서드들을 사용하여 앞에서 말한 기능들을 구현할 수 있다. 참고 자료 TextWatcer의 메서드 TextWatcher에는 beforeTextChanged, onTextChanged, afterTextChanged가 있다. onTextChanged는 변경된 문자열을 보여주는데 afterTextChanged가 세분화 된 것으로 보인다. 그래서 beforeTextChanged와 onTextChanged를 비교해보려 한다. mBinding.etCompare.addTextCha.. Android/TextWatcher 2022. 11. 23. [Android] Expandable RecyclerView 구현하기 리스트에서 게시물을 클릭했을 때 게시물 아래로 콘텐츠가 펼쳐지는 앱을 본 적이 있을 것이다. 아이템을 클릭했을 때 내용을 보이거나 숨기거나 하는 기능에 Expandable이라고 명칭을 붙이는 것 같다. ListView에서는 ExpandalbeListView라는 Widget이 존재하지만 RecyclerView에는 없다. 따라서 Expandable RecyclerView를 직접 구현해야 한다. Expandable RecyclerView는 아이템을 클릭했을 때 현재 목록이 펼쳐졌는지 닫혀있는지 알 수 있도록 하는 상태 값이 필요하다. 그리고 상태 값에 따라서 내용을 visible하거나 gone 처리를 하면 된다. 예제로 RecyclerView의 아이템을 클릭했을 때 목록을 펼치고 다시 누르면 닫히는 앱을 만들.. Android/RecyclerView 2022. 11. 22. [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. 이전 1 2 3 4 5 다음