학사 나부랭이

모바일 프로그래밍 - 임주혁 본문

塵箱/학점을 위한 정리

모바일 프로그래밍 - 임주혁

태양왕 해킹 (14세) 2021. 4. 13. 03:15

액티비티

 사용자 인터페이스를 구성하는 기본 단위. X윈도랑 비슷하지만 더 큰 개념. 눈에 보이는 화면 하나가 액티비티이며 이는 여러 뷰나 프래그먼트로 구성됨.

서비스

 UI가 없이 백그라운드에서 실행되는 컴포넌트. 미디어 플레이어(비활타도 백그라운드에서 노래 불러줌.), 네트워크 감시, 백그라운드 계산 등 사용. UI가 없으니까 사용자 명령을 받을수 있는 액티비티와 연결해서 사용.

Broadcast Receiver

 시스템이 전달할 방송을 대기하고 신호 수신하는 역할. 배터리 떨어졌거나 사진 찍거나 전송 완료하거나 등(이거 완전 인터럽트 아녀?!) 신호만 대기, UI 없음 => 수신하면 의미를 해석해서 적절한 액티비티나 서비스를 띄움. 격리된 환경에서 컴포넌트끼리 통신할 수 있는 공식적, 유일한 방법

Content Provider

 응용 프로그램 간에 데이터를 공유할 수 있는 장치.(IPC?!)

 

안드로이드 매니페스트(xml)

앱의 구성 정보를 담음. (프로젝트 이름, 아이콘, 앱의 특성, 포함된 컴포넌트 목록, 실행 권한 등) 디폴트로 액티비티 하나가 포함되어 있음

 

컴포넌트: 액티비티, 서비스, Content Provider, Broadcast Receiver

 

여러 액티비티를 포함할 수 있고 서비스나 CP도 추가 가능

<intent-filter>에 MAIN, LAUNCHER 등의 속성이 지정, 이 액티비티가 런처에 표시되며 사용자가 직접 실행할 수 있음을 명시

 

메인 액티비티(java)

AppCompatActivity 클래스는 Activity로부터 파생, 구형 장비와 호환성을 유지하기 위한 클래스

MainActivity = 화면 하나

onCreate 콜백 메서드는 슈퍼 클래스로 부모부터 초기화해서 액티비티의 표준 초기화를 실행

setContentView는 인자의 타입에 따라 다르게 레이아웃을 채운다.

1. xml 파일에 레이아웃을 기술하고 레이아웃 파일의 리소스 ID(R.java에 정의, resource.h와 비슷.)를 setContentView 메서드로 전달. 디자인 타임에 미리 레이아웃을 정의할 수 있음 => 복잡한 모양을 만들 수 있고 사용도 편리

2. 뷰 객체(컴포넌트, 이미지, 버튼 등)를 동적으로 생성하고 setContentView 메서드로 전달. 가변적인 레이아웃을 구성할 수 있지만 관리가 어렵다.

 

 

레이아웃 파일(xml)

제일 많이 건드는 거, 디자인 담당, 코드(액티비티)로 뷰 객체를 생성해 편집기 여러 개를 왔다 갔다 하지 않고 디자인할 수 있지만 덩치가 커져서 관리하기 어렵다. 레이아웃은 다음과 같은 장점이 있다.

1. 코드와 데이터가 분리되어 개발자와 디자이너 분담 쉬움

2. 조건에 따라 레이아웃을 교체 가능, 호환성, 국제화에 유리

3. 레이아웃만 수정할 때는 코드를 컴파일하지 않아도 됨

3.1 디자인 타임에 결정되는 정적 레이아웃: xml

3.2 런타임에 결정해야 하는 동적 레이아웃: 코드

4. 구조와 속성을 함축적 기술 가능, 재활용도 가능

 

액티비티는 화면 하나지만 그 자체는 보이지 않는 그냥 투명 그릇 같은 거, 실제로 보이는 건 액티비티 속의 뷰. 모든 뷰는 View 클래스로부터 파생. View에 정의된 멤버는 파생 클래스에도 있음.

1. 위젯: 직접적으로 보이고 UI를 구성. 버튼, 텍스트, 에디트 박스, 라디오 버튼 등

2. 뷰 그룹: 직접적으로 보이지 않으며 다른 뷰를 담는 컨테이너, 레이아웃 클래스.(리니어 레이아웃, 이렐러티브 레이아웃, ...)

 

뷰의 멤버

id

뷰를 지칭하는 고유한 이름

@(+)id/asdf

@는 id를 리소스(R.java)에 정의하거나 거기서 참조하겠다(at)의 뜻. +는 새로 정의. 참조할 때는 붙이지 않음

 

layout_width, height

뷰의 폭과 높이 지정

match_parent: 부모의 크기에 맞춰 최대한 크게

wrap_content: 내용을 포함할 수 있을 정도의 크기

상수 크기

1. 해상도 독립적인, 절대적 크기: px, in, mm, pt

2. 해상도 독립적인, 비율적 크기: dp(device independent pixel), sp(scale independent pixel)

 

padding

뷰와 내용 간의 간격, 안쪽 여백

 

visibility

뷰를 보일 것인가? (visible, invisible-자리 차지, gone-자리도 없음)

 

clickable, longClickable

클릭(또는 롱 클릭) 이벤트를 받을 것인가? (t/f)

 

focusable

tab 등으로 포커스를 받을 것인가? (t/f)

 

기본 위젯

 

텍스트뷰

C#의 lable

text

"asdf", "@(ex. string)/insa" == 리소스/string/에 있는 insa라는 변수의 내용을 가져다 씀 == 소프트 코딩

textColor

문자열 색상

textSize

폰트 크기

textStyle

폰트의 속성(볼드, 이탤릭, 노멀)

typeface

글꼴

singleLine 강제로 한 줄 (t/f)

 

이미지 뷰

이미지박스 같은 거

src

출력할 이미지를 지정. 보통 리소스/drawable에 이미지를 저장, @drawable/asdf으로 불러옴

maxHeight, maxWidth

이미지의 최대 크기, 강제적으로 적용 x, 지정한 크기에 최대한 맞춤 && 종횡비를 가급적 유지.

adjustViewBounds

종횡비를 위해 이미지 뷰의 크기를 조정할 것인가? (t/f)

cropToPadding

여백을 맞추기 위해 이미지를 자를 것인가?(t/f)

tint

이미지에 색조(중동-이집트 여자가 쓰는 실크 덮개처럼 그런 거)를 입힘

scaleType

이미지의 원래 크기와 다를 때 확대/축소 방식 지정

이미지 자원의 id는 파일명, 영문자||_만 사용 가능. 확장자는 id에 포함 x

 

png 알파 채널이 있어서 반투명을 지원, 직사각형이 아닌 이미지도 만들 수 있음

 

버튼 & 에디트

java에 기능을 작성.

findViewById의 줄은 하이라이트 된 부분에서 끝난 거임.

findViewById를 Button 객체에 넣을 수도 있는데 저건 그냥 귀찮아서.

 

레이아웃

LinearLayout

차일드 뷰를 일렬로 배치, 빈틈없이 순서대로 배치. 방향은 xml에서 android:orientation="horizontal||vertical"로 결정. 공백 없이 배치, 알고리즘 간단 == 속도 빠름

gravity

글자 등 내용을 뷰의 어디에 배치할 것인가 지정. ex. android.gravity="center"

레이아웃 과의 관계는 layout_gravity으로 지정 ex. layout_gravity="center"(단, 레이아웃의 정책을 우선시)

baselineAligned

높이가 다른 차일드 뷰를 수평으로 둘 때 아래쪽을 가지런히 정렬?(t/f) 수평 리니어에서만 유효

weight

부모 레이아웃의 남은 영역을 얼마나 차지할 것인가? 0: 필요한 만큼만 1~: 형제 뷰와 비율에 따라 나눔

마진&패딩

layout_marginTop~Right & paddingTop~Right 마진: 부모와의 거리, 패딩: 내용물과의 거리

 

RelativeLayout

뷰와 부모와의 관계 || 형제 뷰끼리 관계로 위치 지정, 기준이 되는 뷰를 먼저 정의, 화면상의 위치와 레이아웃(xml) 상의 위치가 다름, layout_toRightOF="@id/purachina" 처럼 사용

alignWithParentIfMissing

형제 뷰 등 기준이 되는 앵커가 없어지면 부모에 붙어버릴까요? (t/n)

 

AbsoluteLayout

절대 좌표에 차일드 뷰를 배치. (dp 등도 가능) 다만 화면 크기가 바뀌면 배치가 틀어질 수 있음. 보통 잘 안 쓰고 꼭 써야 한다면 마진을 씀

 

FrameLayout

모든 차일드가 프레임의 좌상단에 배치, 추가된 순서대로 겹쳐 표시됨.

 

TableLayout

표 형식으로 차일드 배치. 행(에 해당하는 원소)이자 하나의 객체인 TableRow n개와 그 안에 m개의 열이 배치. A[1][1]이 하나의 셀, 셀 당 차일드 뷰 하나 삽입.

크기 속성에 제약이 있음. 셀의 높이는 항상 wrap_content, 차일드 뷰의 layout_width는 항상 match_parent로 가정.

 

레이아웃 중첩

레이아웃은 뷰의 컨테이너라서 View에서 파생된 모든 객체를 포함할 수 있고 레이아웃 자체도 View의 파생 클래스라 레이아웃끼리 중첩시킬 수 있다.

'塵箱 > 학점을 위한 정리' 카테고리의 다른 글

서버 시스템 관리 - 임주혁  (0) 2021.04.30
사이버 테러와 정보전 - 최윤성  (0) 2021.04.15
Comments