Programming/Android
Message
Message 안드로이드 쓰레드에는 크게 main thread, background thread 로 나뉜다. main은 UI에 해당되는 모든 처리를 담당한다. background는 이 외의 다른 네트워킹 처리라던가 뭔가 시간이 더 걸리는 것을 처리한다. 일단은 이렇게 개념을 잡았다. 메세지는 그렇다면 무엇에 쓰이는 것일까? main도 처리할 UI 작업이 많고, back도 처리할 작업이 있는 경우 back이 아무리 처리를 많이하고 빨리한다해도 main이 준비되지 않으면 보이지 않는다. 그만큼 back에서는 다양한 업무를 처리하고 main에게 보낸다. 그러나 main이 일이 너무 많다면, 이러한 back의 작업을 무시하거나 back이 완료된 일을 들고 계속 대기해야하는 경우가 생긴다. 이런 현상이 바로 우리..
Retrofit
Retrofit Retrofit 은 Square사에서 제공하는 오픈 소스 라이브러리이다. REST API를 안드로이드에서 쉽게 사용하도록 도와준다. OkHttp 라이브러리를 자신의 HTTP클라이언트로 사용한다. 래트로핏은 HTTP 게이트웨이 클래스 생성을 도와준다. - 애노테이션을 지정된 함수를 갖는 인터페이스를 작성한다. - Retrofit이 인터페이스의 구현 클래스를 생성한다. - 이 클래스에서 HTTP 요청(request)을 하고 OkHttp.ResponseBody 로 HTTP 응답(response)을 파싱한다. 여기서 중요한 포인트는, ResponseBody를 그대로 받아오는 것보다 형변환을 한번 거쳐서 가져오는 것이 더 편하고 좋다. 응답 변환기 Response Converter 앱에서 필요한 ..
JetPack AAC: DataBinding
Data Binding LiveData 와 DataBinding ? 둘 다 데이터가 변경되는지 관찰하면서 변경될 때 반응하는 방법을 제공한다. 그러나 둘의 사용법에서의 차이가 존재한다. [스택오버플로 글 참고하기] UI 상의 변화를 실시간으로 관찰하고 반영하고자 한다. 👉 DataBinding 백그라운드에서 데이터를 관찰하고 관리한다. 👉 LiveData [좀 더 자세히 보기] 그리고, LiveData는 LifeCycleOwner를 사용해줘야 한다. 간단하게 이렇게 인식하고 활용하자. 1. 원하는 화면에서 데이터 묶기 기능 추가하기 먼저, 데이터 묶기를 시도할 화면이 필요하다. xml 코드상에 아래의 예시와 같이 작성한다. 구체적인 설명 1. 태그를 xml 코드 전체를 감싼다. xmlns 부분은 layo..
Accessibility
Accessibility 이 앱은 접근성이 좋다. 접근성 ,이 말의 뜻은 시각, 거동, 청각 장애에 상관없이 누구나 사용할 수 있다는 의미이다. 앱의 접근성이 좋을 수록 앱을 더 편안하게 사용할 수 있다. 접근성이 완벽하게 좋은 앱을 만들기는 어렵다. 그렇다고 해서 시도조차 하지 않는 것은 적절하지 않다. TalkBack 토크백은 구글에서 만든 음성 안내 지원 앱이다. 사용자가 수행하는 작업을 기반을 화면의 내용을 음성으로 알려준다. 토크백은 접근성 서비스 (Accessibility Service) 로 작동하는 특별한 컴포넌트이다. 어떤 앱을 사용하든 이것을 통해 화면으로부터 정보를 읽을 수 있다. 기능을 사용해보기 위해 아래와 같이 한다. 1. Android 접근성 도구 모음 설치 ( 구글 플레이 검색..
Localization
Localization 지역화는 사용자의 언어 설정을 기반으로 앱의 적합한 리소스를 제공하는 절차이다. 주로 지역화 작업은 리소스를 통해서 먼저 진행된다. values/ 폴더 아래에 원하는 이름(주로 strings)으로 문자 리소스 파일을 만들어준다. 위와 같이 Locale 을 선택한뒤, 원하는 언어를 선택한다. 예를들어 일본어를 선택헀다면, values-ja 로 형성된다. 언어 구성 수식자는 ISO 639-1 코드의 표준을 따라 두개의 문자로 구성되며, 일본어는 수식자가 ja이다. 탐색기에서는 string.xml (ja) 라는 파일명으로 보인다. 참고로 제일 우측에 Specific Region Only 는 말그대로 어떤지역에서만 그 언어가 보이게 할지 선택하는 것이다. Any Region이 기본값이고 ..
Take Photo with Intent
Take Photo with Intent 화면 작업 👉 FileProvider 등록 👉 저장 데이터 정의 와 파일 저장 경로 설정 👉 사진 찍기 기능 추가 👉 ImageButton and ImageView 만들기 원하는 프래그먼트나 액티비티의 xml 에 ImageButton 과 ImageView를 만든다. 위의 예시 처럼 원하는 형태로 이미지뷰와 이미지 버튼을 만든다. 파일 저장소 사진 파일은 용량이 크다. SQLite DB 에 넣기도 어렵다. 그러므로, 폰의 저장소에 저장하는 것이 바람직하다. (물론, DB 용량이 크다면 가능하다.) 개인 저장소에 저장하려면, Context.getFileStreamPath(String) or Context.getFilesDir() 함수들을 이용한다. Context 클래..
DialogFrag to Frag with Data
Dialog 상속 관계 : Dialog >> AlertDialog >> DatePickerDialog 대화상자는 사용자의 주의를 끌고 입력을 받는데 사용되며 사용자의 선택을 받거나 중요한 정보를 보여줄 때도 유용하다. DialogFragment to Fragment with Data 프래그먼트에서 다이얼로그 DatePickerDialog 는 사용자에게 날짜를 선택하게 유도하는 대화상자이다. 프래그먼트에서는 Fragment의 서브 클래스인 DialogFragment 인스턴스에 포함시키는 것이 좋다.FragmentManger로 DatePickerDialog를 관리하는 것이 유연성이 좋다. 또한, 화면회전시 화면을 유지해주기 때문에 DialogFragment를 사용하는게 좋다. FragmentManger VS..
Frag to Frag with Data
Fragment to Fragment with Data 프래그먼트에서 프래그먼트로 이동하는 방법은 다양하다. 단일 활동 구조 (single activity architexture) 를 사용한다는 가정하에 (간단히 말하면, 한 액티비티에 여러개의 프레그먼트가 있는 구조이다. ) 프래그먼트에서 데이터와 함께 이동하는 방법에 대해 알아본다. 정확히 말하자면, DB와 연동된 데이터가 뜨는 재활용뷰에서 특정 아이템을 선택한다. 그 선택된 아이템의 상세 페이지로 이동한다. 해당 상세 페이지에는 그 아이템의 정보가 보여지게 하는 것이다. 단순 프래그먼트 이동 방법 이동을 시작하는 프래그먼트에서 아래의 코드를 작성해주면 되긴하다. fun onClick(view:View){ val 도착프래그먼트 = 도착Fragment...