java 또는 kotlin으로 제작, 구글 플레이스토어에서 받은 어플리케이션.
API 제공, 앱을 효율적이며 쉽게 개발할 수 있도록 하기 위함
달빅 가상머신, 아트 런타임으로 구성.
자바 기반의 명령어를 CPU 명령어로 변환하여 실행함.
C/C++로 작성됨.
오디오, 비디오 등의 미디어, 데이터베이스, OpenGL 등등
하드웨어의 운영과 관련된 저수준의 관리 기능들이 들어있음
주로 메모리 관리, 디바이스 드라이버 보안 등
사용자 인터페이스를 구성하는 기본 단위.
눈에 보이는 화면 하나가 액티비티이며 여러 개의 뷰(위젯)들로 구성된다.
응용 프로그램은 필요한 만큼의 액티비티를 가질 수 있으며 그 중 어떤 것을 먼저 띄울지 지정.
UI가 없어 사용자 눈에 직접적으로 보이지 않으며 백그라운드에서 무한히 실행되는 컴포넌트
미디어 플레이어를 들을 수 있는데 비활성화된 상태라도 노래는 계속 재생
UI가 없으므로 사용자의 명령을 받아들일 수 있는 액티비티와 연결해서 사용된다.
시스템 또는 앱으로부터 전달되는 방송을 대기하고 신호 전달 시 수신하는 역할을 한다.
예를 들어 배터리가 떨어졌다거나, 전화가 왔다던가, 네트워크 전송이 완료되었다 등의 신호를 받는다.
신호만 대기할 뿐 UI를 따로 가지지는 않으므로 방송 수신 시 방송의 의미를 해석하고 적절한 액티비티를 띄우는 역할
다른 응용프로그램을 위해 자신의 데이터를 제공한다.
안드로이드는 보안이 엄격하여 다른 응용프로그램의 데이터를 함부로 액세스 하지 못하도록 되어있다.
응용 프로그램 간에 데이터를 공유할수있는 합법적인 유일한 장치가 바로 콘텐츠 제공자이다.
실제 안드로이드 장비가 없더라도 있는 것처럼 확인, 개발 가능
App name : 앱 상에 사용자에게 보여주는 이름. 프로젝트 생성 시 영문만 가능.
(AndroidManifest.xml을 통해 App name 변경 가능.-android:label 수정하면 됨.)
Project name : 개발자가 프로젝트를 구별하기 위함.
Package name : 안드로이드 시스템(사용자가 아닌)이 서로 다른 앱을 구분할 수 있도록 하기 위함.
앱은 동일한 패키지 명으로 마켓에 올릴 수 없다. 하지만 다른 서비스의 마켓에는 올릴 수 있다. 앱은 동일한 패키지 명으로 단말기에 두개이상 설치될수없다.
뷰 또는 위젯은 각각의 속성을 가진다.
뷰 간에는 상하 관계를 가질 수 있다.
XML 각각의 요소는 속성을 가진다.
XML 요소 간에는 상하 관계를 가질 수 있다.
이 두가지점이 비슷. 또한 자바 소스에 하드 코딩되지 않고 리소스 형태로 분리할 수 있다.
결국 레이아웃 구조를 변경할 때 자바소스코드 수정을 최소화할 수 있다.
뷰는 화면을 구성하는 최소 단위! 가장 작은 단위!
뷰는 사용자의 터치, 키 입력에 상호작용한다.
눈에 보이는 모든 요소는 뷰고, 화면에 보여지는 모든 요소는 반드시 뷰를 상속받아야 한다.
뷰를 화면에 배치하는 위치 정보가 없다. -> 뷰그룹 필요!
뷰그룹은 여러 자식 뷰를 담을 수 있으며, 뷰는 반드시 뷰그룹에 포함되어야지만 화면에 그려진다.
뷰그룹 자체도 부모 뷰그룹에 의해 배치되어야 하기 때문이다.
뷰그룹은 자식 뷰를 어떻게 배치할까? -> 자식 뷰가 배치 관련 정보를 제공.
누구에게? -> 뷰그룹에게
어떻게? -> LayoutParams를 통해
어디에? -> 액티비티 레이아웃 파일(즉, Activity_main.xml)로
자식 뷰들을 수평 혹은 수직으로 배치하는 뷰그룹
vertical : 수직 배치 / horizontal : 수평 배치
텍스트가 포함된 자식 뷰 중 가장 높이가 긴 뷰를 기준으로 정렬할지 설정함.
자식 뷰에 가중치를 지정해서 그 크기를 결정함.
(이때, layout_width="0dp"또는 "wrap_content"로 설정.)
true면 레이아웃 내 layout_weight를 가지는 모든 자식뷰를 가장 큰 자식뷰의 크기로 조정됨. 이때, layout_weight는 0 이상의 임의의 값도 가능함. (잘 안쓰인다고 말씀하심.)
각 뷰의 관계에 따라 배치
ignoreGravity : 특정 자식뷰에 대한 gravity를 무력화함.
뷰를 겹쳐서 배치
레이아웃 영역에 전경 이미지를 설정, 해당 이미지는 모든 자식 뷰보다 위에 놓여진다.
전경 이미지의 중력 방향
FrameLayout의 높이가 View들의 배치로 결정됨.
표 형태의 배치. LinearLayout과 유사. 결국 LinearLayout이다.
예시>
자식 뷰 중 지정한 열 번호를 해당하는 뷰를 숨긴다. (잘 사용 안 함.)
예> 0,2 : 0열과 2열을 숨기라는 의미
열의 공간이 부족할 때 특정 열을 지정하여 공간을 줄이고 나머지 열의 공간을 확보함.
(View 1을 줄임)
자식 열을 배치하고도 공간이 남을 때 특정 열이 늘어나서 공간을 채우라는 의미.
(View 1을 늘림)
자식 뷰가 배치될 열을 선택함. 자식 뷰를 1열로 설정하면 0번째 열을 비우고 1열부터 뷰가 추가된다.
일반적으로 하나의 뷰는 하나의 열을 차지한다. 이 속성을 통해 하나 이상의 열을 차지하도록 함.
안드로이드는 매우 많은 뷰를 제공한다. 또한 상속관계만으로도 각 뷰들의 특징을 쉽게 이해할 수 있다. (예> checkbox는 button을 상속)
뷰에 대한 유일한 이름.
findViewById 함수에 id를 인자로 전달하면 해당 뷰를 참조할 수 있다.
보통 이렇게 쓴다.(@+id/id_name)
이런식으로 id를 전달한다.
-> setText를 했으므로 "Hello World!"라고 출력이 될 것이다.
뷰 영역 내에 배경 이미지나 특정 색상을 설정함.
-> 이렇게 하게 되면 drawable폴더 안에 있는 ic_Launcher라는 이미지가 배경으로 들어가게 됨.
자식 뷰 내의 여백.