전체 글: 247개의 글
MVVM (Model-View-ViewModel) 패턴은 비즈니스 로직과 사용자 인터페이스(UI)를 완전히 분리함으로써 쉬운 유지관리와 테스트를 진행할 수 있으며 기본적으로 모듈화를 진행하기 때문에 코드 재사용성도 뛰어납니다. 기존의 액티비티(Activity)에 비즈니스 로직과 UI 로직과 같은 복잡한 기능을 넣게 되면 액티비티가 무거워지고 종속성이 너무 강해 테스트가 힘들고 유지보수가 힘들어집니다. MVVM 패턴은 기본적으로 Model과 View 그리고 ViewModel과 같이 각자의 역할에 맡는 기능들을 모듈화하기 때문에 유지관리 및 테스트가 용이해집니다. 1. View View는 Activity나 Fragment 같은 화면에 표현되는 레이아웃을 정의합니다. View는 기본적으로 비즈니스 로직을 포함..
이번 포스팅에서는 안드로이드 스튜디오에서 제공하는 기본 폰트말고 커스텀 폰트(Custom Font)를 적용하는 방법에 대해 알아보겠습니다. 1. 폰트 다운로드 https://noonnu.cc/ 예제 구현을 위해 먼저 폰트를 다운받도록 합니다. 위 사이트로 접속을 하게 되면 무료로 상업적 이용이 가능한 여러 폰트를 제공하고 있습니다. 여러가지 폰트를 제공하고 있으며 미리보기를 통해 폰트가 어떤식으로 적용되는지 확인 할 수 있습니다. 폰트명을 클릭하고 들어가보면 하단에 각 폰트에 대한 라이센스 관련 문구가 있습니다. 잘 확인해보시고 사용하시기 바랍니다. 상단 영역에 있는 다운로드 버튼을 통하여 폰트를 다운로드 해주세요. 2. 폰트 파일 추가하기 이제 다운받은 폰트를 여러분의 프로젝트에 추가해야 합니다. 경로..
RecyclerView는 Adapter가 관리하는 Data Set의 특정 데이터 항목에 대하여 미리 정의된 View를 통해 스크롤이 있는 List 형식으로 표현할 수 있습니다. 이번 포스팅에서는 한 개의 RecyclerView에서 여러 Type의 View를 정의해놓고 데이터의 타입에 따라 각각 다른 ViewType을 적용시키는 방법을 알아보겠습니다. 간단한 채팅 UI를 가지는 RecyclerView를 구현 할것입니다. 해당 RecyclerView에서 사용하는 ViewType은 3개로 중앙에 표시되는 Type과 왼쪽에 채팅내용이 나오는 Type과 오른쪽에 채팅 내용이 나오는 Type 3개로 구성됩니다. 1. DataItem public class DataItem { private String content..
프로젝트를 진행하면서 RecyclerView의 Data Set에 동적으로 아이템을 추가하여 notifyDataSetChanged() 함수를 통해 ReBinding을 시켜야하는 일이 있었습니다. 문제없이 실행되는가 싶더니 데이터가 추가 되고 RecyclerView에 반영이 되는 순간 View가 깜빡 거리는 현상이 생기더군요. 해당 포스팅에서 Adapter의 notifyDataSetChanged 실행 시 RecyclerView의 깜빡 거리는 현상을 해결하는 방법을 알아보겠습니다. 1. 깜빡거리는 원인 Adapter가 관리하는 Data Set에 데이터가 추가 / 삭제 / 갱신등이 이루어지면 notifyDataSetChanged()를 호출하여 Adapter에게 DataSet이 변경되었으니 갱신하라고 알려줘야 합..
1. /res/layout/activity_main.xml ▼ 갤러리에서 가져온 사진을 표현하기 위해 ImageView 위젯 하나를 배치하였습니다. 해당 예제에서는 화면에 배치되어 있는 ImageView를 클릭하였을 때 Gallery Activity릃 실행한 뒤 사진을 선택하고 예제 앱 액티비티로 돌아왔을 때 ImageView에 해당 사진을 표현하도록 하겠습니다. 2. MainActivity.java public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE = 0; private ImageView imageView; @Override protected void onCreate(Bundle saved..
플로팅 액션 버튼(Floating Action Button)은 화면에 떠있는 원형의 버튼으로 머터리얼 디자인에서 자주 사용되는 기본 위젯입니다. 플로팅 액션 버튼(Floating Action Button)을 구현하는 방법은 일반 버튼 위젯을 구현하는 방법과 비슷합니다. 다만 기본적으로 ImageView를 상속받는 위젯이기 때문에 버튼에 표현할 아이콘을 지정할 수 있으며 버튼을 클릭하였을 때 서브 버튼이 나열이 되도록 구현이 가능합니다. 물론 일반 버튼처럼 사용자가 발생한 클릭 이벤트에 대한 처리도 가능합니다. 1. 화면에 FloatingActionButton 사용법 1.1 xml 레이아웃 리소스 추가 FAB 위젯을 레이아웃에 추가하는 방법은 일반 위젯들을 추가시키는 방법과 동일합니다. FAB에서 사용되는..
안드로이드 앱에서 사용자로부터 값을 입력받을 때 사용되는 View 위젯 중 EditText가 있습니다. 앱을 구현하다 보면 이러한 EditText의 Text 입력값이 변경될 때마다 특정 작업을 처리해야 할 경우가 있습니다. 이때는 TextWatcher 인터페이스를 구현하여 EditText의 이벤트 리스너로 등록하여 처리가 가능합니다. 1. TextWatcher 인터페이스 필구 구현 함수들 ■ beforeTextChanged(CharSequence s. int start, int count, int after) CharSequece s : 현재 EditText에 입력된 값 int start : s에 저장된 문자열에서 새로 추가될 문자열의 시작 위치 값 int count : s에 새로운 문자열이 추가된 후 ..
안드로이드 단말기에는 여러 가지 키(Key)가 존재합니다. 이전 액티비티로 돌아가거나 현재 액티비티가 루트 액티비티일 경우 앱을 종료시키는 뒤로 가기 키, 볼륨 조절을 위한 볼륨 업다운 키, 홈 화면으로 이동 가능한 홈 키등 여러 가지 키 이벤트(Key Event)를 발생시켜 단말기의 특정 작업을 처리하는 경우가 많습니다. 안드로이드 앱 개발 과정에서도 이러한 각 키(Key)에 대한 이벤트 처리를 onKeyUp() 함수와 onKeyDown() 함수를 재정의함으로써 이벤트 처리 작업이 가능합니다. 함수명으로도 직관적으로 알수 있듯이 onKeyDown()은 키가 눌렀졌을 때 호출되며 onKeyUp() 함수는 키에서 손을 뗐을 때 호출되는 함수입니다. 두 함수는 KeyCode 값과 KeyEvent 두 개의 공..
안드로이드 앱에서 컨텐츠 전환 및 탐색을 위한 Navigation Menu는 여러 가지 방식으로 구현할 수 있습니다. 사용자가 앱 상단의 버튼을 클릭하여 왼쪽에서 오른쪽으로 슬라이드 형식으로 메뉴가 오픈되는 Drawer Navigation 방식과 App Bar 자체에서 앱의 탐색 및 컨텐츠 전환이 가능한 메뉴 모음을 두는 방식 등이 있습니다. 현재 출시 된 안드로이드 앱의 레이아웃 구성을 보면 보통 이러한 메뉴들이 앱의 하단에 위치하고 있습니다. 앱의 탐색 모음을 하단에 배치함으로써 사용자가 한 번의 클릭 동작만으로 앱을 쉽게 탐색하고 전환 가능하도록 하여 사용자가 편리하고 직관적인 UI를 경험할 수 있도록 합니다. 하단 메뉴 구성은 BottomNavigationView를 통해서 구현합니다. 이번 포스팅..
다양한 크기의 화면을 가지는 단말기가 늘어남에 따라 한 화면에 여러 개의 화면 요소를 원하는 수요가 늘어가고 있습니다. 대표적으로 화면의 크기가 큰 태블릿 PC와 같이 화면의 크기가 큼에 따라 복잡한 레이아웃 구성과 뷰 위젯 배치들로 인해 기존의 Activity를 통한 레이아웃 구성만으로는 구현하기 버거운 면이 있었습니다. 이를 커버하기 위해 나온것이 안드로이드 3.0(API 11)부터 추가된 개념인 프래그먼트(Fragment)입니다. 프래그먼트는 액티비티 내에서 화면 UI의 일부를 나타냅니다. 여러 개의 프래그먼트를 조합하여 액티비티가 출력하는 한 화면의 UI를 표현할 수 있으며 하나의 프래그먼트를 다른 액티비티에 재사용할 수 있습니다. 액티비티(Activity)처럼 하나의 독립된 모듈처럼 실행되기 때..