일반적인 뷰 객체가 아닌 여러 개의 아이템 중에 하나를 선택할 수 있는 리스트 모양의 위젯을 안드로이드에서는 선택 위젯이라고 부르며 일반 위젯과는 구별하여 사용한다. 선택 위젯이 어댑터 패턴을 통해서 데이터를 관리하기 때문인데, 이 어댑터 패턴은 원본 데이터를 뷰에 직접 설정하지 않고 어댑터 클래스를 사용하여 선택 위젯에 보이는 각 아이템이 화면에 표시되기 전에 어댑터의 getView() 메서드를 호출하여 아이템을 반환받아 뷰에 표시하는 특징이 있다. 리사이클러 뷰는 각각의 아이템이 화면에 보일 때 메모리를 효율적으로 사용하도록 캐시를 구현하고 있기 때문에 일반적인 리스트뷰 보다 사용이 권장된다. 바로 한번 확인해보자. 우선, activity_main 레이아웃 내부에 리사이클러 뷰를 구성한다. ◎acit..
직전 포스팅에서 커스텀 버튼 객체를 만들고 이를 레이아웃에 넣어보는 예제를 했다. 버튼과 마찬가지로 레이아웃도 뷰 객체이기 때문에 레이아웃으로 구성된 위젯 객체를 직접 만들 수 있다. 또한 카드뷰를 사용하여 내부 레이아웃의 디자인이 좀 더 둥글고 심플하게 변경할 수 있다. 바로 한번 확인해보자. 우선, layout1.xml 파일을 생성하여 다음과 같이 카드뷰를 삽입하고 그 내부에 레이아웃과 이미지 뷰 & 텍스트뷰를 넣어 구성해준다. ◎layout1.xml 이후에 LinearLayout을 상속 받은 Layout1.class 객체를 생성하고, layout1 레이아웃을 inflate 한다. 해당 객체가 생성됐을 때, 이미지와 텍스트를 set할 수 있도록 생성자를 구성한다. ◎Layout1.java packag..
안드로이드 API에서 제공하는 위젯을 사용하면 거의 대부분의 화면을 만들 수 있다. 하지만, 우리가 원하는 기능만 가진 커스텀 위젯을 따로 구상하여 새로운 뷰를 정의하는 것 또한 가능하다. API에서 제공하는 뷰를 사용하려면 API의 뷰를 상속해야 한다. 이 때 뷰의 영역과 크기는 해당 뷰를 포함하고 있는 레이아웃의 영향을 받아 정해지며, 개발자가 뷰의 상태에 따라 추가적인 코드를 넣을 수 있도록 콜백 메서드가 호출된다. 뷰가 스스로의 크기를 정할 때 자동으로 호출되는 메서드는 onMeasure()이고 스스로를 레이아웃에 맞게 그릴 때는 onDraw() 가 호출된다. 일반적으로 사용하는 뷰 객체의 콜백 메서드는 다음과 같다. public void onMeasure(int widthMeasureSpec, ..
직전 안드로이드 포스팅에서 브로드 캐스트 메시지를 다루며 SMS 데이터를 가져오는 위험 권한을 잠깐 다뤘었다. 이번 포스팅은 위험 권한이라는 개념을 좀 더 파고들어보고, 위험 권한을 어떻게 사용자가 허용/거부하게 하는 지 그 방법을 2가지 알아볼 것이다. 우선 안드로이드에서 권한은 일반 권한과 위험 권한으로 나눌 수 있는데, 일반 권한은 앱을 설치할 때, 사용자에게 해당 권한이 부여된다는 사실을 알려주고 설치할 것인지를 물어본다. 그러나 위험 권한은 앱이 실행 시에 사용자에게 해당 권한을 사용할 것인지를 물어본다. 위험 권한으로 분류된 권한들은 대부분 개인정보가 담겨있는 정보에 접근하거나 개인정보를 만들어낼 수 있은 단말의 주요 장치에 접근할 때 부여되며, 다음과 같다. 허가 그룹 권한 CALENDAR ..
안드로이드에서 브로드캐스팅이란 메시지를 여러 객체에 전달하는 것을 말하며, 글로벌 이벤트라고 부른다. 예시로, '전화가 왔습니다.' 혹은 '문자 메시지가 도착했습니다.' 를 들 수 있다. 우리가 제작한 어플이 다른 어플에서 온 브로드 캐스트 메시지를 받고 싶다면, 브로드캐스트 수신자를 만들어 앱에 등록해야한다. 브로드캐스트 수신자 또한 서비스와 마찬가지로 앱 구성요소이기 때문에 매니페스트 파일에 등록해야 시스템이 알 수 있고 화면도 없게 된다. 그러나 브로드캐스트 수신자는 매니페스트 등록 방식이 아닌 소스 코드에서 registerReceiver() 메서드를 이용하여 등록할 수도 있다. 바로 예제를 한번 구성해보자. 이후 AndroidManifest.xml 파일에 receiver 태그가 자동으로 생성되는데..
Service는 화면 없이 백그라운드에서 동작하며, 어플이 실행하고 있지 않은 상황에서도 주기적으로 데이터를 읽거나 쓰기 위해서 사용한다. 서비스는 액티비티와 함께 안드로이드 4대 구성요소 중 하나이기 때문에 새로 만든 서비스도 마찬가지로 매니페스트 파일에 등록해야 사용할 수 있다. 서비스는 실행된 상태를 계속 유지하기 위하여 서비스가 비정상적으로 종료되더라도 시스템이 자동으로 재실행된다. startService 메서드를 사용하여 액티비티에서 서비스를 실행시킬 수 있으며, 데이터를 주고 받기 위해 Intent 객체를 서비스에 전달한다. 또한 startService는 서비스가 이미 실행이 되고 있더라도 여러 번 호출이 가능하며 서비스는 그대로 메모리에 만들어진 상태로 유지된다. 때문에 startServic..
직전 포스팅인 Navigation Drawer 을 다루면서 생성한 Fragment 객체는 이전에 봤던 Fragment객체의 형태와 많이 달라있었다. 이전처름 Fragment객체를 생성한 뒤, Fragment클래스를 상속받아서 inflate해주는 코드 한 줄만 구성한 것이 아닌, 아래와 같이 ViewModel 객체를 상속 받은 FragmentModelView클래스를 Fragment 클래스와 함께 생성하였다. ◎SlideshowViewModel.java package com.example.callenge.ui.slideshow; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecy..
NavgationDrawer은 화면의 좌측 상단의 아이콘을 클릭했을 때, 바로가기 메뉴 등이 나타나도록 할 수 있는 화면이다. 프로젝트를 생성할 때, 해당 액티비티를 선택하여 생성하는 것 또한 가능하다. 프로젝트를 생성하고나서 activity_main.xml을 열어보면 아래와 같이 app_bar_main.xml 레이아웃 파일이 임포트되어 있고, 그 아래에 NavigationView 태그가 작성이 되어있다. ◎activity_main.xml NavigationView객체를 보면, headerLayout과 menu 속성이 존재하는데 이는 각각 바로가기 메뉴 상단과 그 아래 표시될 메뉴를 나타낸다. ◎app_bar_main.xml app_bar_main.xml 파일이 실질적인 메인화면 역할을 하는 레이아웃 파..
View pager2는 손가락으로 좌우 스크롤하여 넘겨볼 수 있는 기능을 제공한다. (책에서는 View pager를 사용하지만, API 27 기준으로 deprecated됐기 때문에 View pager2를 사용하도록 하겠다) 내부에 프래그먼트를 삽입하면, 뷰페이져는 어뎁터라는 객체와 상호작용하여 이 어뎁터가 삽입한 프래그먼트 중 하나를 사용자에게 보여주는 방식이다. 바로 한번 코드를 확인해보자. ◎activity_main.xml 우선 메인 액티비티에 ViewPager2를 위와 같이 추가한다. 이MainActivity.java 클래스에서는 FragmentStateAdapter 클래스를 상속받는 내부 클래스를 하나 생성하고, 그 생성자 메서드는 FragmentActivity를 받도록 작성한다. 이후에 Frag..
하단 탭은 액션바로 구성했던 상단 탭과는 달리 네비게이션 바를 사용하여 구성하며, BottomNavigationView 위젯으로 만들 수 있다. 바로 예제를 확인해보자. 하단 탭은 res/menu 디렉토리 안에 menu_botton.xml 레이아웃 파일을 새로 생성하여 만든다. ◎ res/menu/menu_botton.xml 다음으로 activity_main.xml 에서 BottomNavigationView 위젯을 FrameLayout 하단에 배치한다. ◎activity_main.xml BottomNavigationView의 menu 속성에 menu/menu_layout.xml 파일을 넣어준다. ◎MainActivity.java package com.example.samplebottomtab; impor..
- react
- redux
- 정보보안기사 #실기 #정리
- javascript
- redux-thunk
- 맛집
- Promise
- AsyncStorage
- react-native
- 이탈리안 레스토랑
- 인천 구월동 이탈리안 맛집
- Async
- 파니노구스토
- 인천 구월동 맛집
- await
- Total
- Today
- Yesterday