Transcript TextView

안드로이드의 아키텍처
 효율적이고 안정적인 자원 관리를 위해 계층을 구성
 하위에서는 저수준 지원 요소들이 있고 상위로 올라갈수록 응용 요소
들이 있다.
 추상화와 보안을 위한 인접한 계층끼리만 통신할 수 있다.
⑤
④
②
③
①
안드로이드 아키텍처
안드로이드의 아키텍처
① : 리눅스 커널
백그라운드 스레드, 메모리 관리, 보안, 디바이스 드라이버 등의
저수준 관리 기능을 담당함.
디바이스 드라이버의 지원이 광범위함.
② : 라이브러리
라이브러리는 장비의 전반적인 속도를 결정하는 중요한 요소임.
• C로 작성되어 있음.
• 안드로이드 라이브러리 종류
• BSD 파생 libc 라이브러리
• 2D 그래픽을 위한 서피스 관리자 및 SGL
• 3D 그래픽을 위한 OpenGL
• 벡터 폰트 출력을 위한 FreeType
• 오디오, 비디오 재생을 위한 미디어 지원
• 데이터베이스 지원을 위한 SQLite
• 인터넷 브라우징을 위한 SSL과 크롬, 사파리에 채용된 WebKit
안드로이드의 아키텍처
③ : 런타임
달빅 가상 머신과 자바 코어 라이브러리로 구성되어 있음.
안드로이드는 자바 가상 머신을 직접 사용하지 않으며 모바일 환경에
최적화한 달빅(Dalvik) 가상 머신을 사용함.
각 프로세스별로 별도의 달빅 가상 머신이 할당되므로 안정성이 높고
메모리 사용량을 줄여 복수개의 가상 머신도 효율적으로 동작하도
록 설계되었음.
달빅(Dalvik)의 어원
달빅(Dalvik)으로 명명한 사람은 구글의 댄 본스타
인(Dan Bornstein)이라는 사람인데 달빅이란 이름
은 본스타인이 살던 아이슬란드의 한 물고리를 잡
는 마을의 이름을 딴 것이다.
안드로이드의 아키텍처
④ : 프레임워크
안드로이드의 API.
응용 프로그램들은 하위의 커널이나 시스템 라이브러리를
직접적으로 호출할 수 없으며 API를 통해서 기능을 요청
해야 함.
API는 하드웨어 액세스를 추상화하며 UI 제작에 필요한 위
젯을 정의하고 시스템 라이브러리와 통신할 수 있는 래
퍼를 제고함.
⑤ : 응용프로그램
인터넷 브라우저, 바탕화면, 주소록 등 플랫폼과 함께 설치
되는 애플릿들은 물론이고 마켓에서 다운받아 설치하는
게임, 유틸리티 등도 모두 이 수준에서 실행됨.
안드로이드 실행
 안드로이드의 응용 프로그램
• 안드로이드 응용 프로그램은 적절한 권한만 있으면 누구든지 인스턴스화할 수
있는 4개의 컴포넌트로 구성된다.
 인스턴화할 수 있는 4개의 컴포넌트 : 액티비티, 서비스, 방송 수
신자, 콘텐트 제공자
[액티비티]
• 사용자 인터페이스를 구성하는 기본 단위다. 눈에 보이는 화면 하나가 액티비티
이며 여러개의 뷰들로 구성된다.
• 응용 프로그램은 필요한 만큼의 액티비티를 가질 수 있으며 그 중 어떤 것을 먼
저 띄울지를 지정한다.
[서비스 ]
[방송수신자(Broadcast Receiver) ]
[콘텐트 제공자(Content Provider)]
 응용 프로그램은 액티비티, 서비스, 방송 수신자, 콘텐트 제공자 중 일
부만을 가질 수도 있고 여러 개를 가질 수도 있다.
프로젝트 구성
strings.xml : 문자열 정의
main.xml : 정의된 문자열을 Linear Layout의 Text View에 넣는다
AndroidFirst.java : setContentView 메서드 호출, 레이아웃을 액티비티에 배치
R.java : 각 파일들이 참조하는 객체의 ID 정의
AndroidFirst.java
액티비티 생성
R.layout.main 레이아웃 배치
R.java
main, hello 등의 명칭 정의
main.xml
LinearLayout
TextView
@string/hello
strings.xml
Hello = Hello World, AndroidFirst
레이아웃 (Layout)
• XML 소스로 구성
• XML 레이아웃과 코드 레이아웃 모두
사용 가능
XML 레이아웃의 장점
• 코드와 데이터가 완벽하게 분리되므로 개
발자와 디자이너의 분담 작업이 용이하다.
• 조건에 따라 레이아웃을 통째로 교체할
수 있으므로 호환성 확보, 국제화에 유리하
다.
• 레이아웃만 수정할 때는 컴파일하지 않아
도 되므로 개발 속도가 빨라진다.
• 구조와 속성을 함축적으로 기술할 수 있
으며 레이아웃 재활용도 가능하다.
레이아웃 (Layout)
-4-
레이아웃 (Layout)
▣ Widgets
-4-
레이아웃 (Layout)
-4-
 뷰의 계층
1. 뷰 (View)
 안드로이드 응용 프로그램의 화면을 구성하는 주요 단위인 액티
비티는 화면에 직접적으로 보이지 않으며, 액티비티 안의 뷰가
사용자를 대면하는 실체이다.
 여러 개의 뷰가 모여 하나의 액티비티를 구성하고, 이러한 액티
비티가 모여 하나의 응용 프로그램이 된다.
 레이아웃은 액티비티 안에 뷰를 배치하는 기법을 말한다.
뷰
• 위젯 : 직접적으로 보이며 사용자 인터페이스를 구성하며, 흔히 컨트롤
이라고 부른다.
• 뷰 그룹 : 뷰를 담는 컨테이너 역할을 하며, 이 부류의 클래스들을 레이
아웃이라고 한다.
 뷰 그룹이면서도 위젯처럼 사용되기도 하는 클래스도 있다.
 서브 클래스는 슈퍼 클래스의 모든 속성을 상속받는다.
 위젯의 계층
1. 뷰 (View)
 View도 자바 클래스의 일종이므로 루트인 Object로부터 파생된다.
 View로부터 직접 파생되는 모든 클래스가 바로 위젯이며 스스로를 그
릴 수 있는 능력을 가지고 있다.
Object
AnalogClock
View
TextView
EditText
EditText
Button
AutoCompleteTextView
CompoundButton
Chronometer
DigitalClock
ImageView
ImageButton
SurfaceView
GLSurfaceView
ProgressBar
CheckBox
RadioButton
ToggleButton
VideoView
SeekBar
AbsSeekBar
RatingBar
 뷰 그룹의 계층
1. 뷰 (View)
 View로부터 파생된 ViewGroup의 서브 클래스이다.
 다른 뷰들을 차일드로 포함하며 차일드를 정렬하는 기능을 가진다.
Object
FrameLayout
ScrollView, HorizontalScrollView
TabHost, TimePicker, DatePicker
View
ViewAnimator
ViewFlipper
TextSwitcher
ViewSwitcher
ImageSwitcher
ViewGroup
AbsoluteLayout
WebView
RelativeLayout
RadioGroup, ZoomControls
LinearLayout
TableLayout, TableRow
TabWidget
AdapterView
AbsListView
ListView
GridView
AbsSpinner
Spinner
Gallery
1. 뷰 (View)
 View의 속성
 id
• 뷰를 칭하는 이름을 정의하며, 코드나 XML 문서에서 뷰를 참조할 때 id를
사용하므로 직관적인 이름을 붙이는 것이 좋다.
• 형식 : @[+]id/ID
- @ : id를 리소스(R.java)에 정의하거나 참조한다는 뜻이며, 무조건 붙여
야 한다.
- + : ID를 새로 정의한다는 뜻이며, 참조 시는 생략 가능하다.
- id : 예약어
- / : 뒤에 원하는 이름을 작성하되, ID는 고유한 명칭이므로 명령 규칙에
맞아야 하며, 뷰끼리 중복되어서는 안된다.
ex) android:id=“@+id/name” : 텍스트 뷰에 name이라는 id를 부여함.
• XML 문서에 ID를 지정하면 이 이름이 R.java에 정수형 상수로 정의된다.
• 코드에서 뷰를 참조할 시 findViewById 메서드 호출, 인수로 참조할 뷰의 id
를 전달한다.
• 모든 뷰에 id를 의무적으로 지정할 필요는 없으며, 코드에서 참조할 필요 없
는 위젯은 보통 id를 생략한다.
 View의 속성
1. 뷰 (View)
 layout_width, layout_height
• 뷰의 폭과 높이를 지정하며, 수평, 수직 각 방향에 대해 크기를 지정할 수 있다.
• 속성값으로 아래의 세 가지 중 하나의 값을 가진다.
- fill_parent : 부모의 주어진 크기를 다 채운다.
- wrap_content : 내용물의 크기만큼만 채운다.
• ex) “버튼”이라는 캡션을 가지는 버튼 배치
 View의 속성
1. 뷰 (View)
 background
• 뷰의 배경을 지정하며, 색상 및 이미지 등의 여러 가지 객체로 지정 가능하다.
• 색상 지정 시 네 가지 형식이 적용되며, 배경뿐만 아니라 색상을 지정하는 모든
속성에 적용된다.
- #RGB
- #ARGB
- #RRGGBB
- #AARRGGBB
ex) #ff0000 (#f00): 빨간색, #0000ff : 파란색
 padding
• 뷰와 내용물간의 간격을 지정한다. (즉 안쪽 여백)
• padding 속성 값을 지정하여 4방향에 대한 여백을 조절할 수 있다.
• 속성값 : paddingLeft, paddingTop, paddingRight, paddingBottom
 View의 속성
1. 뷰 (View)
 visibility
• 뷰의 표시 유무를 지정하며, 속성값으로 아래의 세 가지 중 하나의 값을 가진다.
- visible : 보이는 상태임.
- invisible : 숨겨진 상태이되 자리는 차지함.
- gone : 숨겨지며 자리도 차지하지 않음.
 clickable, longClickable
• 마우스 클릭 이벤트를 받을 것인지, 롱클릭 이벤트를 받을 것인지를 지정한다.
- click : 손가락으로 뷰를 누름
- longClick: 손가락으로 뷰를 누른 채 잠시 기다림
• 진위형이므로 true 또는 false 둘 중 하나의 값을 지정한다.
 focusable
• 키보드 포커스를 받을 수 있는지를 지정한다.
• 디폴트 값으로 false가 설정되어 있으며, 필요 시 속성을 true로 변경한다.
• 에디트나 버튼처럼 사용자의 입력이 필요한 파생 클래스는 디폴트로 true가 지
정되어 있다.
1. 뷰 (View)
 TextView
 문자열 출력 및 입력받는 위젯
 입력 기능은 숨겨져 있으며 서브 클래스인 EditText에서 활성화된다.
 text
• 텍스트 뷰의 가장 중요한 속성으로 출력할 문자열을 지정한다.
• 리터널 및 리소스로 대입한다.
형식
설명
“문자열”
겹 따옴표로 문자열을 싸서 바로 대입한다. \ 문자가 들어가면 이
스케이프 된다. \n 은 개행이며 \uxxxxx는 유니코드 문자이다.
@[패키지:]type:name
리소스에 대한 레퍼런스로 지정한다. 보통 string.xml에 문자열을
정의해 놓고 @string/id 식으로 지정한다.
?[패키지:][type:]name
테마 속성으로 지정한다.
 textColor
• 문자열의 색상을 지정하며, 디폴트는 불투명한 밝은 회색이다.
• #RRGGBB나 #AARRGGBB 형식으로 각 색상 요소들의 강도를 지정한다.
1. 뷰 (View)
 TextView
 textSize
• 텍스트의 폰트 크기를 지정하며, 실수 타입으로 지정할 때 숫자 뒤에 sp, dp, px, in, mm 등
의 단위를 같이 지정한다.
 textStyle
• 폰트의 속성을 지정한다.
• normal, bold, italic 중 하나를 쓰거나 ‘|’로 묶어 두 개 이상의 상수값을 지정할 수 있다.
ex: “bold|italic”, “normal|italic”
 typeFace
• 글꼴의 모양을 지정하며, normal, sans, serif, monospace 중 하나로 선택 가능하다.
• 모바일 환경에서 내장된 폰트 개수에 제약이 있다.
 width, height
• 텍스트 뷰의 폭과 높이이며 크기값과 단위를 같이 지정한다.
• 텍스트 뷰는 단독으로 존재하는 경우는 거의 없고 대부분 레이아웃 안에서 차일드로 존재
하기 때문에 이 두 속성은 거의 사용되지 않는다.
1. 뷰 (View)
 ImageView
 아이콘이나 비트맵을 출력하는 위젯으로, 리소스, 파일 등은 물론이고
컨텐트 프로바이더나 웹 상의 이미지로도 표시 가능하다.
 src
• 출력할 이미지를 지정하는 가장 중요한 속성이다.
• 주로 리소스에 이미지를 복사해 두고 @drawable/ID 형식으로 이미지를 출력하는
방법을 사용한다.
 maxHeight, maxWidth
• 이미지가 출력될 최대 크기를 지정한다.
 adjustViewbounds
• 이미지의 종횡비를 맞추기 위해 이미지 뷰의 크기를 적당히 조정할 것인가를 지
정하며, 속성값은 true나 false 중 하나를 사용한다.
그 외
• cropToPadding, tint, scaleType
ImageView
1. 뷰 (View)
jpg, png, gif 등의 이미지 포맷을 지원한다.
SDK 1.6 이후 해상도 별로 세 개의 폴더가 존재하며,
해상도 별로 각 폴더에 이미지를 넣어두면 운영체제
가 사용할 이미지를 결정한다.
고해상도 이미지
저해상도 이미지
중해상도 이미지
1. 뷰 (View)
 Button, EditText
 View, TextView의 서브 클래스이며 고유의 속성은 따로 가지지 않는다.
 Button : 사용자로부터 명령을 입력 받음
 EditText : 문자열을 입력 받음
 LinearLayout
2. 리니어 레이아웃
 차일드 뷰를 수평, 수직으로 일렬 배치하는 레이아웃으로, 가장 단순하
면서 직관적이며 사용빈도가 높다.
 orientation
• 뷰의 배치 방향을 결정하는 속성.
• vertical : 차일드를 위에서 아래로 수직으로 배열
• horizontal : 차일드를 왼쪽에서 오른쪽으로 수평 배열
버튼1
버튼1
버튼2
버튼2
버튼3
[ vertical ]
[ horizontal ]
버튼3
2. 리니어 레이아웃
LinearLayout
Layout/Horizontal
<LinearLayout
android:orientation=“horizontal”
<TextView
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:text=“@string/hello”
android:textColor=“#ff0000”
android:textSize=“20pt”
android:textStyle=“italic”/>
1.
2.
3.


텍스트뷰를 추가함
텍스트뷰의 텍스트는 문자열리소스로
각 속성변경함
글자색, 배경색, 글자크기, 글자스타일
글자체
2. 리니어 레이아웃
 baselineAligned
 높이가 다른 차일드 뷰를 수평으로 정렬 시 하단 정렬 지정 (디폴트
true)
[ base1 ]
[ base2 ]
2. 리니어 레이아웃: gravity
 내용물의 위치를 지정하며, 수평, 수직 방향에 대해 각각 정렬 방
식을 지정할 수 있다.
 두 속성을 같이 지정할 때는“|”연산자를 이용하며, 이 때 연산자
양쪽으로 공백이 전혀 없어야 한다.
 각 정렬 방식은 비트 필드로 정의, center, fill은 수평, 수직 정렬
상태 플래그의 조합으로 정의되어 있다.
상수
center_horizontal
left
right
설명
수평으로 중앙에 배치한다.
컨테이너의 왼쪽에 배치하며, 크기는 바뀌지 않는다.
컨테이너의 오른쪽에 배치한다.
fill_horizontal
수평 방향으로 가득 채운다.
center_vertical
수직으로 중앙에 배치한다.
top
bottom
fill_vertical
center
fill
컨테이너의 상단에 배치하며, 크기는 바뀌지 않는다.
컨테이너의 하단에 배치한다.
수직 방향으로 가득 채운다.
수평으로나 수직으로 중앙에 배치한다.
컨테이너에 가득 채우도록 수직, 수평 크기를 확장한다.
2. 리니어 레이아웃
 Gravity 실습
android:textSize=“30pt”
android:textColor=“#00ff00”
2. 리니어 레이아웃
layout_gravity: 뷰를 부모의 어디에 둘 것인가를 결정하는 속성
 layout_weight
2. 리니어 레이아웃
 중요도에 따라 차일드의 크기를 균등 분할한다.
 중요도가 0이면 자신의 고유한 크기만큼, 1 이상이면 형제 뷰와의 비
율에 따라 부모의 영역을 균등하게 배분한다.
[ weight1 ]
[ weight2 ]
2. 리니어 레이아웃
layout_weight
[ weight3 ]
2. 리니어 레이아웃
 padding, margin
 여백과 관련된 속성
 padding
• 뷰와 내용물간의 간격 지정
• 뷰의 입장에서 볼 때 안쪽 여백을 뜻하며 뷰 자체의 속성
• 4면 모두 동일한 여백이 지정되며, paddingLeft, paddingTop, paddingRight, paddingBottom
으로 4면의 개별 여백 지정 가능
 margin
• 뷰와 부모와의 간격을 지정하며, 근처에 형제 뷰가 있으면 동일한 간격으로 여백 생성
• 뷰의 입장에서 볼 때 바깥 여백을 뜻하며 레이아웃의 속성
• 4면 모두 동일한 여백이 지정되며, layout_marginLeft, layout_marginRight,
layout_marginTop, layout_marginBottom 으로 4면의 개별 여백 지정 가능
2. 리니어 레이아웃
padding, margin
Padding과 layout margin 속성 변경해보기
2. 리니어 레이아웃 : 중첩
-상단의 레이아웃에 있는 텍스트뷰는 바탕색만 있으며 text의 내용은 없다.
-색도 리소스에 정의하여 사용한다.
-하단의 레이아웃에 있는 텍스트뷰는 텍스트에 각각 색을 지정하였다.
-사용한 문자열은 모두 리소스에 정의하여 사용한다. 글자크기도 모두 지정한다.
- 상단과 하단의 레이아웃 weight은 25:15로 지정한다.
- 화면 내용에 맞게 뷰들의 속성을 변경한다.
3. RelativeLayout
 위젯과 부모와의 위치 관계 또는 위젯끼리의 관계를 지정함으로써 뷰를 배치
 위젯끼리의 관계 지정을 위하여 기준이 되는 위젯에 id를 반드시 지정해야 한다.
 리소스 컴파일러는 빠른 배치를 위해 위젯간의 관계를 한번에(one pass) 읽으며,
특정 뷰가 다른 뷰의 위치에 종속적일 때 기준이 되는 뷰를 먼저 정의해야 한다.
ex: A를 B의 위에 배치하고 싶다면 XML 문서상에 B를 먼저 기술한 후 A를 나중에 기술해야 한
다.
A
B
<RelativeLayout>
<B
android:id=“@+id/b”/>
<A
android:id=“@+id/a”/>
</RelativeLayout>
3. RelativeLayout
 레이아웃이 배치되는 순서
철수
철수
영희
철수
영희
몽룡
좌상단에
철수 오른쪽에
영희 밑에
부모의 오른쪽에
철수
영희
춘향 몽룡
몽룡 왼쪽에
몽룡의 아래쪽 정렬
3. RelativeLayout
▶
- 에디트텍스트를 기준으로 배치한다.
- [확인] 버튼을 [취소] 버튼과 에디트텍스트를 기준으로 배치한다.
- [취소] 버튼의 오른쪽 변을 부모 뷰로 맞춘다.
에디트텍스트를 기준으로 사용
3. RelativeLayout
 RelativeLayout 예제 – name card
• 좌상단의 이미지를 제일 먼저 배치, 그 아래 삭제
버튼을 배치한다.
• 부모의 위쪽 변에 이름을 붙이면서 동시에 이미지
의 오른쪽에 배치한다.
• 부모의 오른쪽에 전화번호를 붙이되 이름과 베이
스를 맞추어 가지런히 한다.
• 설명 문자열은 이름 밑에 붙이되 왼쪽 변을 이름과
나란히 맞춘다.
4. FrameLayout
 차일드를 배치하는 규칙 없이 모든 차일드
는 프레임의 좌상단에 나타나며, 차일드가 두
개 이상일 때는 추가된 순서대로 겹쳐서 표
시된다.
이미지뷰를 이용하여 실습해 보기
5. TableLayout
 표 형식으로 차일드를 배치하는 레이아웃으로 바둑판 모양이다.
 테이블은 임의 개수 TableRow 객체로 구성되며, TableRow 안에 임의 개수 열이
배치되고, 이를 셀이라 부르며 셀에는 차일드 뷰 하나가 들어간다.
 테이블의 전체 크기는 행(TableRow)*열(셀)이 된다.
 테이블의 차일드들은 정해진 규칙에 따라 크기가 결정되므로 크기 속성에 대한
제약이 있다.
 TableRow 객체의 높이는 항상 wrap_content로 강제됨.
: 여러 개의 행이 한 테이블에 공존해야 하기 때문이다.
 layout_width 속성은 따로 지정할 수 없으며 항상 fill_parent로 가정됨.
: 셀에 배치되는 자식 뷰는 무조건 주어진 셀 안에 배치되기 때문이다.
 각 행의 열들은 0에서부터 시작하는 번호가 자동으로 지정된다. 행에서 남아 사
용되지 않는 열을 다른 위젯이 확장하여 사용할 수 있고, 특정 위젯에 layout_sp
an 속성을 적용하면 해당 위젯을 2개 이상의 열에 확장하여 배치할 수도 있다.
또한 특정 위치의 열에 위젯을 배치할 수도 있다
5. TableLayout
5. TableLayout
속성
값
의미
남은 공간이 있을 때 지정된 열을
stretchColumns
shrinkColumns
늘린다.
0부터 시작
지정된 열의 공간을 최대한 줄인다
지정된 열이 처음에는 보이지 않게
collapseColumns
한다.
layout_column
0부터 시작
뷰가 표시될 열번호
layout_span
양수
뷰가 차지할 열개수
 레이아웃 중첩
6. 레이아웃 관리
 레이아웃은 뷰의 컨테이너이므로 View로부터 파생된 모든 객체를 레이아웃
안에 놓을 수 있으며, 레이아웃 자체도 View의 파생 클래스이므로 레이아웃끼
리 중첩시킬 수 있다.
 레이아웃 중첩 예제 – NestLayout
•
•
•
•
제일 바깥에 LinearLayout, 전체는 수직으로 뷰가 배열된다.
수직 LinearLayout 안에 TextView, Table, 수평 LinearLayout 이 일차 차일드로 배치된다.
Table은 다시 2행 3열의 셀로 분할되고, 각 셀에는 텍스트 뷰가 들어있다.
수평 LinearLayout 안에는 세 개의 TextView가 배치되어 있다.
수직 리니어
TextView
테이블
TextView
TextView
TextView
TextView
TextView
TextView
TextView
TextView
TextView
테이블 로우
수평 리니어