2009년 상반기 사업계획

Similar documents
Contents v 학습목표 뷰와레이아웃에대해이해하고, 레이아웃을활용, 관리하는여러가지기법들에대하여알아본다. v 내용 뷰 (View) 리니어레이아웃 (Linear Layout)

2_안드로이드UI

레이아웃 (Layout)

리니어레이아웃 - 2 -

어댑터뷰

PowerPoint 프레젠테이션

Microsoft PowerPoint - DoItAndroid_PART02_01_기본위젯과레이아웃_Rev.1.0 [호환 모드]

Microsoft PowerPoint - 4주차_Android_UI구현.ppt [호환 모드]

Microsoft PowerPoint - 04기본위젯(Ver 1.0)

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

Layout

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

슬라이드 1

03장

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

2 Application Name: Day10_yhg <LinearLayout android:layout_weight="3" > /> an

50_1953.pdf

<4D F736F F F696E74202D B3E25FB8F0B9D9C0CFBEDBC7C1B7CEB1D7B7A1B9D6205BC8A3C8AF20B8F0B5E55D>

학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다.

이장에서다룰내용 테두리를제어하는스타일시트 외부여백 (Margin) 과내부여백 (Padding) 관련속성 위치관련속성 2

Microsoft PowerPoint UI-Layout.Menu.pptx

01장

PowerPoint Presentation

Daum 카페

PowerPoint 프레젠테이션

슬라이드 1

뷰그룹 ( 레이아웃 ) 레이아웃이름 ( 클래스이름 ) FrameLayout LinearLayout 설명단일객체를표현하기위한프레임. 왼쪽상단에하나의뷰를배치하기때문에나중 에그린객체만보여준다. 수평또는수직으로자손의뷰를배치. 뷰가들어갈만한공간이없을때는자동으로 스크롤바가나타난다

( )부록

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

JAVA PROGRAMMING 실습 08.다형성

TipssoftAppActivity.java // 기본소스파일 main.xml // 배치와구성에관련된리소스파일 string.xml // 프로그램에서사용할문자열에관련된리소스파일 컴파일을하고나면 r.java 라는소스파일이하나추가되는데이파일은리소스파일을소스파일에서이용할수있도

13ÀåÃß°¡ºÐ

PowerPoint Presentation

PowerPoint Template

Microsoft PowerPoint - 02처음으로만드는(Ver 1.0)

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint 프레젠테이션

슬라이드 1

Visual Basic 반복문

(Microsoft PowerPoint - Ch06.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint Presentation

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

위젯과레이아웃위젯은 View 클래스를상속해화면디스플레이와이벤트처리를할수있도록구현된스크린구성의최소단위를말한다. android.widget 패키지에는여러유형의위젯들이포함되어있다. TextView, ImageView, Button, ImageButton 등은가장간단한위젯들이

gnu-lee-oop-kor-lec06-3-chap7

PowerPoint Presentation

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt

<4D F736F F F696E74202D20BEC8B5E5B7CEC0CCB5E520BEDB20B0B3B9DF20C6AFB0AD E342E312EC3D6C1BEBCF6C1A42DC0CEBCE2BABB292E707

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

강의 개요

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

슬라이드 1

제8장 자바 GUI 프로그래밍 II

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

쉽게 풀어쓴 C 프로그래밍

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint 프레젠테이션

JUNIT 실습및발표

제11장 프로세스와 쓰레드

Microsoft PowerPoint - kandroid_for_sec_ _final [호환 모드]

슬라이드 1

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

PowerPoint Presentation

adfasdfasfdasfasfadf

슬라이드 1

PowerPoint Template

쉽게 풀어쓴 C 프로그래밊

Microsoft PowerPoint App Fundamentals[Part2].pptx

<4D F736F F F696E74202D205BC3D6C1BE5D3133C1D6C2F720B8AEBDBAC6AEBAE420B0ADC0C7C0DAB7E12D >

윈도우즈프로그래밍(1)

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint Application Resources[Part1](2.0h).pptx

12 주차 인텐트

헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Design Issues

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

금오공대 컴퓨터공학전공 강의자료

PowerPoint 프레젠테이션

C++ Programming

쉽게

Java ...

chap 5: Trees

TEST BANK & SOLUTION

Transcription:

레이아웃 (Layout) 안드로이드프로그래밍정복 (Android Programming Complete Guide)

2/20 Contents 학습목표 뷰와레이아웃에대해이해하고, 레이아웃을활용, 관리하는여러가지기법들에대하여알아본다. 내용 뷰 (View) 리니어레이아웃 (Linear Layout) 다른레이아웃 레이아웃관리

3/20 1. 뷰 (View) 뷰의계층 안드로이드응용프로그램의화면을구성하는주요단위인액티비티는화면에직접적으로보이지않으며, 액티비티안의뷰가사용자를대면하는실체이다. 여러개의뷰가모여하나의액티비티를구성하고, 이러한액티비티가모여하나의응용프로그램이된다. 레이아웃은액티비티안에뷰를배치하는기법을말한다. 뷰 위젯 : 직접적으로보이며사용자인터페이스를구성하며, 흔히컨트롤이라고부른다. 뷰그룹 : 뷰를담는컨테이너역할을하며, 이부류의클래스들을레이아웃이라고한다. 뷰그룹이면서도위젯처럼사용되기도하는클래스도있으며, 특정위젯을상세히알고싶다면그슈퍼클래스들부터연구해야한다. 서브클래스는슈퍼클래스의모든속성을상속받는다.

4/20 1. 뷰 (View) 위젯의계층 View 도자바클래스의일종이므로루트인 Object 로부터파생된다. View 로부터직접파생되는모든클래스가바로위젯이며스스로를그릴수있는능력을가지고있다. Object AnalogClock EditText AutoCompleteTextView View TextView Button CompoundButton Chronometer CheckBox DigitalClock RadioButton ImageView ImageButton ToggleButton SurfaceView GLSurfaceView VideoView SeekBar ProgressBar AbsSeekBar RatingBar

1. 뷰 (View) 뷰그룹의계층 View 로부터파생된 ViewGroup 의서브클래스이다. 다른뷰들을차일드로포함하며차일드를정렬하는기능을가진다. Object FrameLayout ScrollView, HorizontalScrollView View TabHost, TimePicker, DatePicker ViewGroup AbsoluteLayout ViewAnimator WebView ViewFlipper ViewSwitcher TextSwitcher ImageSwitcher RelativeLayout LinearLayout RadioGroup, ZoomControls TableLayout, TableRow TabWidget AdapterView AbsListView AbsSpinner ListView GridView Spinner Gallery 5/20

6/20 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 를생략한다.

7/20 1. 뷰 (View) View 의속성 layout_width, layout_height 뷰의폭과높이를지정하며, 수평, 수직각방향에대해크기를지정할수있다. 속성값으로아래의세가지중하나의값을가진다. - fill_parent : 부모의주어진크기를다채운다. - wrap_content : 내용물의크기만큼만채운다. - 정수크기 : 지정한크기에맞춘다. ex) Start 라는캡션을가지는버튼배치 지정한크기가액면대로다받아들여지지않으며, 주위다른위젯들의크기에영향을받는다. 명시적인크기지정시정수하나와단위를지정하는예약어를같이사용하며, 이이단위는크기를지정하는모든속성에공통적으로적용된다. 단위 : px, in, mm, pt, dp ( 또는 dip), sp ( 또는 sip)

8/20 1. 뷰 (View) View 의속성 background 뷰의배경을지정하며, 색상및이미지등의여러가지객체로지정가능하다. 색상지정시네가지형식이적용되며, 배경뿐만아니라색상을지정하는모든속성에적용된다. - #RGB - #ARGB - #RRGGBB - #AARRGGBB ex) #ff0000 (#f00): 빨간색, #0000ff : 파란색 padding 뷰와내용물간의간격을지정한다. ( 즉안쪽여백 ) padding 속성값을지정하여 4방향에대한여백을조절할수있다. 속성값 : paddingleft, paddingtop, paddingright, paddingbottom

9/20 1. 뷰 (View) View 의속성 visibility 뷰의표시유무를지정하며, 속성값으로아래의세가지중하나의값을가진다. - visible : 보이는상태임. - invisible : 숨겨진상태이되자리는차지함. - gone : 숨겨지며자리도차지하지않음. clickable, longclickable 마우스클릭이벤트를받을것인지, 롱클릭이벤트를받을것인지를지정한다. - click : 손가락으로뷰를누름 - longclick: 손가락으로뷰를누른채잠시기다림 진위형이므로 true 또는 false 둘중하나의값을지정한다. focusable 키보드포커스를받을수있는지를지정한다. 디폴트값으로 false가설정되어있으며, 필요시속성을 true로변경한다. 에디트나버튼처럼사용자의입력이필요한파생클래스는디폴트로 true가지정되어있다.

10/20 1. 뷰 (View) TextView 문자열출력및입력받는위젯 입력기능은숨겨져있으며서브클래스인 EditText 에서활성화된다. text 텍스트뷰의가장중요한속성으로출력할문자열을지정한다. 리터널및리소스로대입한다. 문자열 형식 @[ 패키지 :]type:name 설명 겹따옴표로문자열을싸서바로대입한다. \ 문자가들어가면이스케이프된다. \n 은개행이며 \uxxxxx 는유니코드문자이다. 리소스에대한레퍼런스로지정한다. 보통 string.xml 에문자열을정의해놓고 @string/id 식으로지정한다.?[ 패키지 :][type:]name 테마속성으로지정한다. textcolor 문자열의색상을지정하며, 디폴트는불투명한밝은회색이다. #RRGGBB 나 #AARRGGBB 형식으로각색상요소들의강도를지정한다.

11/20 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) TextView singleline 텍스트가위젯의폭보다길때강제로한줄에출력한다. 속성의디폴트는 false 로폭보다더긴줄은자동으로아래쪽으로개행된다. [ TextView 예제실행결과 ] string.xml <?xml version= 1.0 encoding= utf-8 > <resources> <string name= hello >Hello World, TextViewTest!</string> <string name= app_name >TextViewTest</string> <string name= insa >Hello</string> <string name= anyoung > 안녕하세요 </string> </resources> main.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent > android:text= @string/insa android:textcolor= #ff0000 android:textsize= 20pt android:textstyle= italic /> android:text= @string/anyoung android:textsize= 20sp android:background= @0000ff /> android:text= Good Morning android:textcolor= #8000ff00 android:textsize= 5mm android:typeface= serif /> </LinearLayout> 12/20

13/20 1. 뷰 (View) ImageView 아이콘이나비트맵을출력하는위젯으로, 리소스, 파일등은물론이고컨텐트프로바이더나웹상의이미지로도표시가능하다. src 출력할이미지를지정하는가장중요한속성이다. 주로리소스에이미지를복사해두고 @drawable/id 형식으로이미지를출력하는방법을사용한다. maxheight, maxwidth 이미지가출력될최대크기를지정한다. adjustviewbounds 이미지의종횡비를맞추기위해이미지뷰의크기를적당히조정할것인가를지정하며, 속성값은 true 나 false 중하나를사용한다. 그외 croptopadding, tint, scaletype

1. 뷰 (View) ImageView jpg, png, gif 등의이미지포맷을지원한다. SDK 1.6 이후밀도별로세개의폴더가존재하며, 해상도별로각폴더에이미지를넣어두면운영체제가사용할이미지를결정한다. Layout/imageviewtest.xml 고해상도이미지 저해상도이미지 중해상도이미지 [ ImageView 예제실행결과 ] <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent > <ImageView android:src= @drawable/pride /> <ImageView android:src= @drawable/pride android:maxheight= 70px android:maxwidth= 120px android:adjustviewbounds= true /> <ImageView android:src= @drawable/dog android:tint= #4000ff00 /> </LinearLayout> 14/20

15/20 1. 뷰 (View) Button, Edit View, TextView의서브클래스이며고유의속성은따로가지지않는다. Button : 사용자로부터명령을입력받음 EditText : 문자열을입력받음 ( 에디트 ) Layout/buttonedit.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent > <EditText android:id= @+id/edit android:text= 여기다입력 /> <Button android:id= @+id/btn android:text= 입력완료 /> </LinearLayout>

16/20 2. 리니어레이아웃 LinearLayout 차일드뷰를수평, 수직으로일렬배치하는레이아웃으로, 가장단순하면서직관적이며사용빈도가높다. orientation 뷰의배치방향을결정하는속성. ( 디폴트는 horizontal) vertical : 차일드를위에서아래로수직으로배열 horizontal : 차일드를왼쪽에서오른쪽으로수평배열 버튼 1 버튼 1 버튼 2 버튼 3 버튼 2 버튼 3 [ vertical ] [ horizontal ]

2. 리니어레이아웃 LinearLayout Layout/Horizontal <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= horizontal android:layout_height= fill_parent > [ Horizontal ] Layout/Horizontal2 android:orientation= horizontal android:text= @string/insa android:textcolor= #ff0000 android:textsize= 20pt android:textstyle= italic /> [ Horizontal2 ] Layout/Horizontal3 android:text= @string/insa android:textcolor= #ff0000 android:textsize= 20pt android:textstyle= italic /> [ Horizontal3 ] 17/20

18/20 2. 리니어레이아웃 gravity 내용물의위치를지정하며, 수평, 수직방향에대해각각정렬방식을지정할수있다. 두속성을같이지정할때는 연산자를이용하며, 이때연산자양쪽으로공백이전혀없어야한다. 각정렬방식은비트필드로정의, center, fill 은수평, 수직정렬상태플래그의조합으로정의되어있다. 상수값설명 center_horizontal 0x01 수평으로중앙에배치한다. left 0x03 컨테이너의왼쪽에배치하며, 크기는바뀌지않는다. right 0x05 컨테이너의오른쪽에배치한다. fill_horizontal 0x07 수평방향으로가득채운다. center_vertical 0x10 수직으로중앙에배치한다. top 0x30 컨테이너의상단에배치하며, 크기는바뀌지않는다. bottom 0x50 컨테이너의하단에배치한다. fill_vertical 0x70 수직방향으로가득채운다. center 0x11 수평으로나수직으로중앙에배치한다. fill 0x77 컨테이너에가득채우도록수직, 수평크기를확장한다.

2. 리니어레이아웃 gravity Layout/gravity1.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent > android:layout_height= fill_parent android:text= 정렬테스트 android:textsize= 30pt android:textcolor= #00ff00 /> </LinearLayout> Layout/gravity2.xml android:layout_height= fill_parent android:text= 정렬테스트 android:textsize= 30pt android:textcolor= #00ff00 android:gravity= center /> Layout/gravity3.xml android:layout_height= fill_parent android:text= 정렬테스트 android:textsize= 30pt android:textcolor= #00ff00 android:gravity= center_vertical /> 19/20

20/20 2. 리니어레이아웃 gravity Layout/lgravity1.xml android:layout_height= fill_parent android:text= 정렬테스트 android:textsize= 30pt android:textcolor= #00ff00 android:background= #ff0000 android:layout_gravity= center /> Layout/lgravity1.xml android:text= 정렬테스트 android:textsize= 30pt android:textcolor= #00ff00 android:background= #ff0000 android:layout_gravity= center /> [ lgravity1 width 만변경 ] [ lgravity1 width, height 모두변경 ]

2. 리니어레이아웃 gravity Layout/lgravity2.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent android:gravity= center > android:text= 정렬테스트 android:textsize= 30pt android:textcolor= #00ff00 android:background= #ff0000 /> </LinearLayout> Layout/lgravity3.xml [ lgravity2 ] [ lgravity3 ] <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent android:gravity= center > android:text= 정렬테스트 android:textsize= 30pt android:textcolor= #00ff00 android:background= #ff0000 /> <Button android:layout_heigth= wrap_content android:text= 버튼이다. /> </LinearLayout> 21/20

22/20 2. 리니어레이아웃 gravity Layout/lgravity4.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent android:gravity= center > android:text= 정렬테스트 android:textsize= 30pt android:textcolor= #00ff00 android:background= #ff0000 android:layout_gravity= center_horizontal android:gravity= right bottom /> </LinearLayout> [ lgravity4 ]

23/20 2. 리니어레이아웃 baselinealigned 높이가다른차일드뷰를수평으로정렬시하단정렬지정 ( 디폴트 true) Layout/base1.xml ~ base2.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= horizontal android:layout_height= fill_parent android:baselinealigned= ture > android:text= Medium android:textsize= 10pt /> android:text= Small android:textsize= 5pt android:background= #0000ff /> android:text= Large android:textsize= 20pt android:typeface= serif /> </LinearLayout> [ base1 ] [ base2 ]

24/20 2. 리니어레이아웃 layout_weight 중요도에따라차일드의크기를균등분할한다. 중요도가 0 이면자신의고유한크기만큼, 1 이상이면형제뷰와의비율에따라부모의영역을균등하게배분한다. Layout/weight1.xml ~ weight2.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent > <Button android:text= 위쪽버튼 android:layout_weight= 1 /> <EditText android:text= 가운데에디트 android:layout_weight= 3 /> <Button android:text= 아래쪽버튼 android:layout_weight= 1 /> </LinearLayout> [ weight1 ] [ weight2 ]

25/20 2. 리니어레이아웃 layout_weight Layout/weight3.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent > <Button android:layout_height= 64px android:text= Tool Bar android:layout_weight= 0 /> <EditText android:layout_height= fill_parent android:layout_weight= 1 /> <Button android:layout_height= 64px android:text= Menu Bar android:layout_weight= 0 /> </LinearLayout> [ weight3 ]

26/20 2. 리니어레이아웃 padding, margin 여백과관련된속성 padding 뷰와내용물간의간격지정 뷰의입장에서볼때안쪽여백을뜻하며뷰자체의속성 4 면모두동일한여백이지정되며, paddingleft, paddingtop, paddingright, paddingbottom 으로 4 면의개별여백지정가능 margin 뷰와부모와의간격을지정하며, 근처에형제뷰가있으면동일한간격으로여백생성 뷰의입장에서볼때바깥여백을뜻하며레이아웃의속성 4 면모두동일한여백이지정되며, layout_marginleft, layout_marginright, layout_margintop, layout_marginbottom 으로 4 면의개별여백지정가능 마진 마진 패딩 패딩 Button

2. 리니어레이아웃 padding, margin Layout/padding2.xml <LinearLayout android:background= #ff0000 android:layout_margin= 10px > Layout/padding3.xml <LinearLayout android:background= #ff0000 android:layout_margin= 10px android:padding= 10px > Layout/padding1.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent > <EditText android:text= Upper Text /> <LinearLayout android:background= #ff0000 > <Button android:text= Button /> </LinearLayout> <EditText android:text= Lower Text /> </LinearLayout> [ padding2 ] [ padding3 ] [ padding1 ] 27/20

28/20 3. 다른레이아웃 RelativeLayout 위젯과부모와의위치관계또는위젯끼리의관계를지정함으로써뷰를배치 위젯끼리의관계지정을위하여기준이되는위젯에 id 를반드시지정해야한다. 리소스컴파일러는빠른배치를위해위젯간의관계를한번에 (one pass) 읽으며, 특정뷰가다른뷰의위치에종속적일때기준이되는뷰를먼저정의해야한다. ex: A 를 B 의위에배치하고싶다면 XML 문서상에 B 를먼저기술한후 A 를나중에기술해야한다. A B <RelativeLayout> <B android:id= @+id/b /> <A layout_above= @id/b /> </RelativeLayout> [ 원하는배치 ] [ XML 문서 ]

29/20 3. 다른레이아웃 RelativeLayout Layout/relative1.xml <?xml version= 1.0 encoding= utf-8 > <RelativeLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical > android:id= @+id/chulsoo android:layout_marginright= 20px android:textsize= 15pt android:text= 철수 /> android:id= @+id/younghee android:layout_torightof= @id/chulsoo android:textsize= 15pt android:text= 영희 /> [ relative1 예제실행결과 ] android:id= @+id/mongryong android:layout_below= @id/younghee android:alignparentright= true android:layout_marginleft= 10px android:textsize= 15pt android:text= 몽룡 /> android:id= @+id/chunhyang android:layout_torightof= @id/mongryong 철수철수영희철수 android:layout_alignbottom= @id/mongryong 영희철수영희 android:textsize= 15pt android:text= 춘향 /> </RelativeLayout> 레이아웃이배치되는순서 몽룡 춘향 몽룡 좌상단에 철수오른쪽에 영희밑에 부모의오른쪽에 몽룡왼쪽에몽룡의아래쪽정렬

3. 다른레이아웃 RelativeLayout RelativeLayout 예제 name card 좌상단의이미지를제일먼저배치, 그아래삭제버튼을배치한다. 부모의위쪽변에이름을붙이면서동시에이미지의오른쪽에배치한다. 부모의오른쪽에전화번호를붙이되이름과베이스를맞추어가지런히한다. 설명문자열은이름밑에붙이되왼쪽변을이름과나란히맞춘다. [ 정상적인결과 ] [ 베이스를맞추지않은결과 ] RelativeLayout 예제 ListIconText 아이콘, 텍스트, 버튼세개로구성된항목뷰를리스트뷰안에배치한것. 아이콘은왼쪽, 버튼은오른쪽, 사이에텍스트배치 텍스트의길이에상관없이버튼은항상항목뷰의오른쪽에정렬 [ ListIconText ] 30/20

31/20 3. 다른레이아웃 AbsoluteLayout 관계나순서에상관없이지정한절대좌표에차일드뷰를배치한다. 공식문서에는사용을금지하였으며, RelativeLayout, FreamLayout 을사용한다. Layout/absolute.xml <?xml version= 1.0 encoding= utf-8 > <AbsoluteLayout xmlns:android=http://schemas.android.com/apk/res/android android:layout_height= fill_parent > android:layout_x= 50px android:layout_y= 100px android:textsize= 15pt android:text= (50,100) /> android:layout_x= 200px android:layout_y= 70px android:textsize= 15pt android:text= (200,70) /> </AbsoluteLayout>

32/20 3. 다른레이아웃 FrameLayout 차일드를배치하는규칙없이모든차일드는프레임의좌상단에나타나며, 차일드가두개이상일때는추가된순서대로겹쳐서표시된다. ViewGroup 의서브클래스로 addview, removeview 등의메서드로실행중에차일드를추가, 삭제할수있으며, getchildcount 메서드로차일드의개수를조사할수있다. 필요한차일드만표시하고겹쳐진차일드는숨겨둘수있다. 차일드의보임상태는개별뷰의 visibility 속성을사용하여조정하며실행중에도조건에따라뷰의보임상태를변경할수있다. 속성 foreground - 차일드의위쪽에살짝얹히는이미지를지정한다. - 반투명한색상, 이미지사용이가능하다. foregroundgravity - 전경의이미지를배치할방법을지정하며, 디폴트는 fill 이다. measureallchildren - 모든차일드의크기를다측정할것인지, 보이거나숨겨진차일드의크기만적용할것인지를지정한다. - 디폴트는 false 여서 GONE 상태의차일드크기는측정하지않는다.

33/20 3. 다른레이아웃 FrameLayout Layout/frame.xml <?xml version= 1.0 encoding= utf-8 > <FrameLayout xmlns:android=http://schemas.android.com/apk/res/android android:layout_height= fill_parent > <Button android:id= @+id/btn android:text= Push Button /> <ImabeView android:id= @+id/img android:src= @drawable/pride /> </FrameLayout> Layout/frame.java package exam.layout; import android.app.*; import android.os.*; import android.view.*; import android.widget.*; public class Frame extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancesatae); setcontentview(r.layout.frame); } } Button btn = (Button)findViewById(R.id.btn); btn.setonclicklistener(new Button.OnClickListener() { public void onclick(view v) { ImageView img=(imageview)findviewbyid(r.id.img); if(img.getvisibility() == View.VISIBLE) { img.setvisibility(view.invisible); } else { img.setvisibility(view.visible); } } });

34/20 3. 다른레이아웃 TableLayout 표형식으로차일드를배치하는레이아웃으로바둑판모양이다. 테이블은임의개수 TableRow 객체로구성되며, TableRow 안에임의개수열이배치되고, 이를셀이라부르며셀에는차일드뷰하나가들어간다. 테이블의전체크기는행 (TableRow)* 열 ( 셀 ) 이된다. 테이블의차일드들은정해진규칙에따라크기가결정되므로크기속성에대한제약이있다. TableRow 객체의높이는항상 wrap_content 로강제됨. : 여러개의행이한테이블에공존해야하기때문이다. layout_width 속성은따로지정할수없으며항상 fill_parent 로가정됨. : 셀에배치되는자식뷰는무조건주어진셀안에배치되기때문이다. [ TableLayout 예제 ] [ TableLayout 예제 ]

35/20 4. 레이아웃관리 레이아웃중첩 레이아웃은뷰의컨테이너이므로 View 로부터파생된모든객체를레이아웃안에놓을수있으며, 레이아웃자체도 View 의파생클래스이므로레이아웃끼리중첩시킬수있다. 레이아웃중첩예제 NestLayout 제일바깥에 LinearLayout, 전체는수직으로뷰가배열된다. 수직 LinearLayout 안에 TextView, Table, 수평 LinearLayout 이일차차일드로배치된다. Table 은다시 2 행 3 열의셀로분할되고, 각셀에는텍스트뷰가들어있다. 수평 LinearLayout 안에는세개의 TextView 가배치되어있다. TextView TextView TextView TextView 수직리니어 테이블 테이블로우 TextView TextView TextView TextView TextView TextView 수평리니어

36/20 4. 레이아웃관리 레이아웃중첩 레이아웃중첩예제 MultPage 각버튼을누를때프레임내의모든페이지를일단숨긴후버튼에대응되는페이지하나만표시 [ Page 1 button ] [ Page 2 button ] [ Page 3 button ]

4. 레이아웃관리 실행중속성변경 대부분의속성은실행중변경가능하도록메서드를제공한다. 속성값을변경하는메서드의이름은속성이름앞에 set 이붙고속성의첫글자는대문자로시작하며, 인수로전달할값은수평일때 0, 수직일때 1 이다. LinearLayout 클래스 public void LinearLayout.setOrientation(int orientation) gravity 변경메서드 public void TextView.setGravity(int gravity) TextView 속성관련메서드 void settext(charsequence text) void settextcolor(int color) void settextsize(float size) 37/20

38/20 4. 레이아웃관리 실행중속성변경 메서드를호출하기전에속성변경의대상이되는뷰를찾는다 이메서드는액티비티와뷰에정의되어거의모든위치에서호출이가능하다. 호출객체에따라달리사용되며, 액티비티에서호출시전체레이아웃에서검색, 특정뷰에서검색시뷰의차일드중하나를검색한다. View Activity.findViewById (int id) View View.findViewById (int id) ID 로부터 (ById) 대응되는뷰객체 (View) 를찾는다 (find). id 인수로검색대상뷰에지정해놓은 ID 를전달한다.

39/20 4. 레이아웃관리 레이아웃전개 XML 문서에있는레이아웃은 aapt 툴에의해이진형태로컴파일되어실행파일에내장된다. 전개 (Inflation) XML 문서에정의된레이아웃과속성을읽어실제뷰객체를생성하는동작 setcontentview : XML 문서의리소스 ID 를전달받아객체를생성하여액티비티를채움 사용자가직접전개할수있으며, 안드로이드는전개를위해시스템수준에서전개자를따로제공한다. - View inflate (int resource, ViewGroup root) LayoutInflater 클래스의정적메서드로전개자를구할수있다. - 컨텍스트를인수로전달하여전개자를구하고, 이전개자의 inflate 메서드를호출한다. - static LayoutInflater LayouotInflater.from (Context context) View 의정적메서드를이용하여전개할수있다. - static View inflate (Context context, int resource, ViewGroup root)

4. 레이아웃관리 레이아웃파라미터 일반속성 뷰외부와는전혀상관없이뷰자체의속성을지정한다. 주로의미를이해할수있도록직관적인이름을사용한다. 위젯에따라적용가능한종류가변경된다. 레이아웃파라미터 뷰가배치되는부모, 즉레이아웃에소속되는속성, 부모에게차일드뷰를배치할방법을지시한다. 뷰자체의성질을규정하는것이아니라뷰외부와의관계를지정한다. 레이아웃파라미터의이름은 layout_ 으로시작된다. 위젯이아닌소속된부모레이아웃에따라적용가능한종류가변경된다. 레이아웃 파라미터 ViewGroup.LayoutParams ViewGroup.MarginLayoutParams LinearLayout.LayoutParams AbsoluteLayout.LayoutParams RelativeLayout.LayoutParams layout_width, layout_height layout_marginleft, layout_marginright layout_gravity, layout_weight layout_x, layout_y layout_above, layout_alignparentright [ 각레이아웃별로제공되는레이아웃파라미터 ] 40/20

4. 레이아웃관리 레이아웃파라미터 레이아웃파라미터예제 layoutparmeter, marginparameter Layout/layoutparameter.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent android:background= #ffffff android:gravity= center > android:textcolor= #ff0000 android:textsize= 20px android:text= TextVieiw android:background= #00ff00 /> </LinearLayout> Layout/layoutparameter.xml <?xml version= 1.0 encoding= utf-8 > <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:orientation= vertical android:layout_height= fill_parent android:background= #ffffff > <Button android:layout_height= fill_parent android:text= Button With Margin android:layout_margintop= 30px android:layout_marginbottom= 30px /> </LinearLayout> [ layoutparameter 예제 ] [ marginparameter 예제 ] 41/20