
TabLayout을 만들고, ViewPager2를 연동하여 Tab 선택 시 Page(Fragment)를 변경하는 예제입니다 1. TabLayout / ViewPager2 생성 우선 UI를 그립니다 예제에서는 Fragment(fragment_tab.xml) 위에 ViewPager / TabLayout을 생성하였습니다 Activity에 하셔도 상관없습니다 2. Adapter 생성 Page이동을 구현하기 위해 Adapter를 추가합니다 FragmentStateAdapter를 상속받아 구현하면됩니다. getItemCount에서는 fragment의 개수를 리턴하고, createFragment에서 tab 순서에 따라 Fragment를 생성하여 리턴합니다 예제에서는 Tab1Fragment 및 Tab2Fragment를..

Android에서는 음성인식 모듈이 기본 탑재되어있습니다 별도의 외부 라이브러리를 사용하지 않아도 기본 API 를 이용해 음성인식을 구현할 수 있습니다 1. manifest 수정 앱에서 음성인식을 사용하는 것을 알리기 위해 action을 정의해주어야 합니다 2. 코드 구현 SpeechRecognize 를 이용해 음성인식을 구현합니다 RecognitionListener를 달아 결과 및 에러를 수신하여 처리합니다 private fun speechRecognize(context: Context) { val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH) intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, c..

Room 사용 중 table 의 schema 가 변경되거나 하면 version을 올려주어 db 내용 이전 작업을 해줘야 합니다 예제에서는 기존 User table에 nickname이 추가된 경우를 가정합니다 1. 배경 기존 테이블 CREATE TABLE USER( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INT NOT NULL ) 변경하고자 하는 테이블 CREATE TABLE USER( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INT NOT NULL, nickname TEXT ) 2. 변경작업 우선 Migration 객체를 만들고, migrate method을 ove..

Media file등을 DB에 저장해두고 사용하는데, 외부에서 파일이 지워진 경우가 발생하였습니다 파일을 열기 전에 파일이 존재하는지 확인하는 용도입니다 fun exists(context: Context, uri: Uri): Boolean { return try { val contentResolver = context.contentResolver val inputStream = contentResolver.openInputStream(uri) inputStream?.let { it.close() return true } ?: run { return false } } catch (exception: Exception) { false } }
국가별로 익숙한 날짜 표현 형태가 다르기 때문에, 다국어 앱 개발 시 이를 고려해야합니다 Locale에 따라 국가별로 SimpleDateFormat을 각각 설정할 수 도 있겠지만, 모든 국가를 고려하는게 쉽지 않습니다 android.text.format.DateFormat.getBestDateTimePattern 메소드를 사용하면, 이를 자동으로 지원할 수 있습니다 import android.text.format.DateFormat import java.text.SimpleDateFormat import java.util.* fun getDateTimeText(): String { val pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), ..
안드로이드에서 제공하는 Intent를 이용해 동영상을 촬영하고 특정한 위치에 저장하는 방법입니다 비슷한 예제로 사진촬영을 요청할 수 있습니다. 마지막 5번에서 ACTION_VIDEO_CAPTURE 대신 ACTION_IMAGE_CAPTURE를 넘기면 사진을 촬영할 수 있습니다 여기서는 동영상을 촬영하여 DCIM폴더에 저장하는 방법을 공유합니다 1. 권한 설정 AndroidManifest.xml에 아래 권한을 추가합니다 2. file provider 설정 external storage를 사용하기 위해서는 앱에서 접근할 path 들을 미리 정의해줘야 합니다 우선 Androidanifest.xml에 provider를 설정합니다 그리고 res/xml/file_paths.xml을 추가합니다 3. permission..
- Total
- Today
- Yesterday