레이아웃 (Layout)

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

2009년 상반기 사업계획

2_안드로이드UI

리니어레이아웃 - 2 -

어댑터뷰

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

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

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

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

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

PowerPoint 프레젠테이션

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

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

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

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

슬라이드 1

( )부록

Layout

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

13ÀåÃß°¡ºÐ

슬라이드 1

03장

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

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

슬라이드 1

PowerPoint 프레젠테이션

<4D F736F F F696E74202D B3E25FB8F0B9D9C0CFBEDBC7C1B7CEB1D7B7A1B9D6205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

Daum 카페

01장

PowerPoint 프레젠테이션

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

슬라이드 1

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

PowerPoint Presentation

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

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

¾Èµå·ÎÀÌµå ³¹Àå-Åë.PDF

Microsoft PowerPoint UI-Layout.Menu.pptx

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

<4D F736F F F696E74202D20BEC8B5E5B7CEC0CCB5E520BEDB20B0B3B9DF20C6AFB0AD E342E312EC3D6C1BEBCF6C1A42DC0CEBCE2BABB292E707

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

// 화면을터치하였을때해야할작업구현 case MotionEvent.ACTION_MOVE: // 화면을드래그하였때 // 화면을드래그하였을때해야할작업구현 case MotionEvent.ACTION_UP: // 화면에서터치가사라질때 // 화면에서터치가사라질때해야할자업구현 c

JAVA PROGRAMMING 실습 08.다형성

50_1953.pdf

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

<BFF8B5E5B7CEC0CCB5E5322E687770>

안드로이드2_14

PowerPoint Template

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

PowerPoint 프레젠테이션

PowerPoint Presentation

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

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Presentation

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

<4D F736F F F696E74202D205BC3D6C1BE5D3133C1D6C2F720B8AEBDBAC6AEBAE420B0ADC0C7C0DAB7E12D >

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

PowerPoint 프레젠테이션

PowerPoint Presentation

Visual Basic 반복문

BMP 파일 처리

PowerPoint Presentation

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

제11장 프로세스와 쓰레드

슬라이드 1

슬라이드 1

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - kandroid_for_sec_ _final [호환 모드]

Microsoft PowerPoint - Java7.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

강의 개요

JAVA PROGRAMMING 실습 02. 표준 입출력

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

chap 5: Trees

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

01 [ 일기장 ] 애플리케이션프로젝트작성 - [MyDiary] 앱 Mobile Apps >> [MyDiary] 앱프로젝트구조설계 일기장애플리케이션인 [MyDiary] 앱은메인화면과일기장의내용을작성하는화면으로이루어져있다. 화면이 2개라는것은액티비티가 2개이고액티비티에대

Microsoft PowerPoint - 양정수-Android_View_and_Window_System.ppt [호환 모드]

JUNIT 실습및발표

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

Android Master Key Vulnerability

콘텐츠 PowerPoint 디자인

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint Presentation

PowerPoint Presentation

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

슬라이드 1

PowerPoint Presentation

Design Issues

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

윈도우시스템프로그래밍

Javascript

OpenCV와 함께하는 컴퓨터 비전 프로그래밍 캠프

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

일반인을 위한 전자책 제작 방법

Microsoft Word - src.doc

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - web-part02-ch15-문서객체조작.pptx

Transcription:

레이아웃 (3 장 ) 김성영교수 금오공과대학교 컴퓨터공학부

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

액티비티 vs. 뷰 액티비티 (Activity) 안드로이드응용프로그램의화면을구성하는주요단위 여러개의액티비티가모여하나의응용프로그램을구성 화면에직접적으로보이지않음 뷰 (View) 사용자를대면하는실체 여러개의뷰가모여하나의액티비티를구성 레이아웃 : 액티비티안에뷰를배치하는기법 3

뷰의종류 위젯 (widget) 직접적으로보이며사용자인터페이스를구성 ( 컨트롤 ) View 클래스로부터직접파생되며스스로를그릴수있는능력을가지고있음 뷰그룹 (view group) 직접보이지는않으며뷰를담는컨테이너역할을수행 ( 레이아웃 ) View 클래스로부터파생된 ViewGroup 클래스의서브클래스임 다른뷰들을자식으로포함하며이들을정렬하는기능을가짐 뷰그룹이면서위젯처럼사용되는경우도있음 ( 예 : 리스트뷰 ) 4

위젯계층구조 Object AnalogClock EditText AutoCompleteTextView View TextView Button CompoundButton Chronometer CheckBox DigitalClock RadioButton ImageView ImageButton ToggleButton SurfaceView GLSurfaceView VideoView SeekBar ProgressBar AbsSeekBar RatingBar 5

뷰그룹계층구조 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 6

View 클래스속성 (1) id 뷰를구분하는식별자 형식 : @[+]id/id @ : id를리소스 (R.java) 에정의하거나참조한다는의미 ( 반드시사용 ) + : id를새로정의한다는의미 ( 참조시는생략가능 ) id : 예약어 / : 이름을지정 ( 명칭규칙에맞아야하며중복불가 ) ex) android:id="@+id/name" : name이라는새로운 id 부여 id를지정하면 R.java에정수형상수로저장됨 코드에서참조할필요없는경우에는일반적으로 id를생략함 7

View 클래스속성 (2) layout_width, layout_height 폭과높이지정 가능한속성값 fill_parent : 부모의주어진크기를다채움 wrap_content : 내용물의크기만큼만채움 정수크기 : 지정한크기에맞춤 단위 : px, in, mm, pt, dp ( 또는 dip), sp ( 또는 sip) ex) "Start" 라는캡션을가지는버튼배치 8

View 클래스속성 (3) Background 배경을지정 ( 색상및이미지등 ) 색상지정형식 #RGB, #ARGB, #RRGGBB, #AARRGGBB ex) #ff0000 (#f00): 빨간색, #0000ff : 파란색 padding 뷰와내용물간의간격지정 ( 안쪽여백 ) 가능한속성값 paddingleft, paddingtop, paddingright, paddingbottom 9

View 클래스속성 (3) visibility 뷰의표시유무지정 가능한속성값 visible : 화면에표시 invisible : 숨겨진상태이며자리차지 gone : 숨겨진상태이며자리차지하지않음 clickable, longclickable 마우스의클릭혹은롱클릭이벤트여부에대한설정 (true 혹은 false) click : 손가락으로뷰를누름 longclick: 손가락으로뷰를누른채잠시기다림 10

View 클래스속성 (4) focusable 키보드포커스를받을수있는지여부를지정 디폴트값은 false임 Edit 혹은 Button과같이사용자의입력이필요한파생클래스는디폴트로 true가지정됨 11

TextView 클래스속성 (1) 문자열출력및입력을위한위젯 Text 출력할문자열지정 (literal 혹은 resource) 형식 설명 " 문자열 " \: 이스케이프문자예 ) \n: 줄바꿈, \uxxxxx 는유니코드문자 @[ 패키지 :]type:name 리소스에대한레퍼런스지정보통 string.xml 에문자열을정의하고 @string/id 식으로지정?[ 패키지 :][type:]name 테마속성으로지정 textcolor 문자열색상 ( 디폴트 : 불투명한밝은회색 ) 형식 : #RRGGBB 혹은 #AARRGGBB 12

TextView 클래스속성 (2) textsize 텍스트의폰트크기지정 ( 단위 : sp, dp, px, in, mm 등 ) textstyle 글꼴속성지정 (normal, bold, italic) 로두가지이상속성지정가능 ex: "bold italic", "normal italic" typeface 글꼴모양지정 (normal, sans, serif, monospace) 13

TextView 클래스속성 (3) width, height 텍스트뷰의폭과높이지정 텍스트뷰는단독으로존재하는경우는거의없고대부분레이아웃안에서차일드로존재하기때문에이두속성은거의사용되지않음 singleline 텍스트가위젯의폭보다길때강제로한줄에출력 디폴트는 false 임 14

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"> <TextView android:text="@string/insa" android:textcolor="#ff0000" android:textsize="20pt" android:textstyle="italic"/> <TextView android:text="@string/anyoung" android:textsize="20sp" android:background="#0000ff"/> <TextView android:text="good Morning" android:textcolor="#8000ff00" android:textsize="5mm" android:typeface="serif"/> </LinearLayout> pp. 112 ~ 113 15

ImageView 클래스 아이콘이나비트맵을출력하는위젯 jpg, png, gif 등의이미지포맷지원 SDK 1.6 이후해상도별로세개의폴더가존재하며운영체제가사용할이미지결정 고해상도이미지 저해상도이미지 중해상도이미지 16

ImageView 클래스속성 (1) src 출력할이미지지정 리소스에이미지를저장하고 @drawable/id 형식으로사용 maxheight, maxwidth 이미지가출력될최대크기지정 adjustviewbounds 이미지의종횡비에따른이미지뷰의크기변경여부설정 (true 혹은 false) 17

ImageView 클래스속성 (2) croptopadding true: 위젯의주어진여백에맞추기위해이미지의일부를잘라냄 tint 색조변경 형식 : #AARRGGBB scaletype 이미지의크기를변경하여출력할때사용할알고리즘지정 matrix, fitxy, center, centercrop, centerinside 등 18

ImageView 클래스예제 pp. 117 ~ 118 Layout/imageviewtest.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"> <ImageView 200x150 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> 19

ImageView 클래스 사용상의주의사항 사용할이미지파일을 res/drawable 폴더에복사 자동으로 R.java 에이미지 id 생성 파일명사용에주의 영문자와언더바 (_) 로만구성 공백문자사용불가 소문자만을사용 20

Button 및 Edit 클래스 (1) 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:layout_width="wrap_content" android:id="@+id/edit" android:text=" 여기다입력 "/> <Button android:layout_width="wrap_content" android:id="@+id/btn" android:text=" 입력완료 "/> </LinearLayout> p. 120 21

Button 및 Edit 클래스 (2) src/buttonedit.java package exam.buttonedit; import android.app.activity; import android.os.bundle; import android.view.*; import android.widget.*; public class ButtonEdit extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.buttonedit); } } Button btn = (Button)findViewById(R.id.btn); btn.setonclicklistener(new Button.OnClickListener() { @Override public void onclick(view v) { EditText edit = (EditText)findViewById(R.id.edit); String str = edit.gettext().tostring(); Toast.makeText(ButtonEdit.this, str, Toast.LENGTH_SHORT).show(); } }); pp. 121 ~ 122 22

LinearLayout 개요 java.lang.object android.view.view android.view.viewgroup android.widget.linearlayout 차일드뷰 ( 위젯및뷰그룹 ) 를수평이나수직으로일렬배치하는레이아웃 주요속성 orientation, gravity, layout_gravity, baselinealigned 23

LinearLayout 주요속성 : orientation (1) orientation 뷰의배치방향을결정 ( 디폴트 : horizontal) vertical : 차일드를위에서아래로수직으로배열 horizontal : 차일드를왼쪽에서오른쪽으로수평배열 버튼 1 버튼 1 버튼 2 버튼 3 버튼 2 버튼 3 [ vertical ] [ horizontal ] 24

LinearLayout 주요속성 : orientation (2) Layout/Horizontal (ButtonEdit 변경 ) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_height="fill_parent" > Layout/Horizontal2 (TextViewTest 변경 ) <TextView android:orientation="horizontal" android:text="@string/insa" android:textcolor="#ff0000" android:textsize="20pt" android:textstyle="italic"/> 나머지두텍스트는오른쪽으로밀려남 Layout/Horizontal3 <TextView android:orientation="horizontal" android:layout_width="wrap_content" android:text="@string/insa" android:textcolor="#ff0000" android:textsize="20pt" android:textstyle="italic"/> 25

LinearLayout 주요속성 : gravity (1) gravity vs. layout_gravity gravity 뷰내부의내용물에대한배치방법 layout_gravity 뷰를부모내에배치하는방법 26

LinearLayout 주요속성 : gravity (2) gravity 수평, 수직방향에대한정렬방식지정 두가지속성을동시에지정 : " " 연산자 ( 연산자양쪽에공백없음 ) 상수 값 설명 center_horizontal 0x01 수평으로중앙배치 left 0x03 왼쪽배치, 크기변경없음 right 0x05 오른쪽배치 fill_horizontal 0x07 수평방향으로가득채움 center_vertical 0x10 수직으로중앙배치 top 0x30 상단배치, 크기변경없음 bottom 0x50 하단배치 fill_vertical 0x70 수직방향으로가득채움 center 0x11 수평및수직으로중앙배치 fill 0x77 컨테이너에가득채움 27

LinearLayout 주요속성 : gravity (3) 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" > <TextView android:layout_height="fill_parent" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00"/> </LinearLayout> Layout/gravity2.xml <TextView android:layout_height="fill_parent" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00" android:gravity="center"/> 28

LinearLayout 주요속성 : gravity (4) Layout/gravity3.xml <TextView android:layout_height="fill_parent" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00" android:gravity="center_vertical"/> Layout/gravity3.xml <TextView android:layout_height="fill_parent" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00" android:gravity="center_vertical right"/> 29

LinearLayout 주요속성 : layout_gravity (1) Layout/lgravity.xml <TextView android:layout_height="fill_parent" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00" android:background="#ff0000" android:layout_gravity="center"/> 30

LinearLayout 주요속성 : layout_gravity (2) Layout/lgravity1.xml <TextView android:layout_width="wrap_content" android:layout_height="fill_parent" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00" android:background="#ff0000" android:layout_gravity="center"/> Layout/lgravity1.xml <TextView android:layout_width="wrap_content" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00" android:background="#ff0000" android:layout_gravity="center"/> [ lgravity1 width 만변경 ] [ lgravity1 width, height 모두변경 ] 수직 ( 수평 ) 리니어는차일드의수직 ( 수평 ) 요청을무시 31

Layout/lgravity2.xml <?xml version="1.0" encoding="utf-8"> LinearLayout 주요속성 : <LinearLayout layout_gravity (3) xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_height="fill_parent" android:gravity="center" > <TextView android:layout_width="wrap_content" 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" > <TextView android:layout_width="wrap_content" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00" android:background="#ff0000"/> <Button android:layout_width="wrap_content" android:layout_heigth="wrap_content" android:text=" 버튼이다."/> </LinearLayout> 32

LinearLayout 주요속성 : layout_gravity (4) 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" > <TextView android:layout_width="200px" android:layout_height="100px" android:text=" 정렬테스트 " android:textsize="30pt" android:textcolor="#00ff00" android:background="#ff0000" android:layout_gravity="center_horizontal" android:gravity="right bottom"/> </LinearLayout> [ lgravity4 ] 33

LinearLayout 주요속성 : baselinealigned 높이가다른차일드뷰를수평으로정렬시하단정렬지정여부 디폴트 : true [ base1 ] [ base2 ] 수평리니어에서만적용 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="true" > // false 로변경하면? <TextView android:layout_width="wrap_content" android:text="medium" android:textsize="10pt"/> <TextView android:layout_width="wrap_content" android:text="small" android:textsize="5pt" android:background="#0000ff"/> <TextView android:layout_width="wrap_content" android:text="large" android:textsize="20pt" android:typeface="serif"/> </LinearLayout> 34

LinearLayout 주요속성 : layout_weight (1) 중요도에따라차일드의크기를균등분할 값이클수록많은영역차지 0: 자신의고유크기로표현 1이상 : 형제뷰와의비율에따라부모의영역을균등하게배분 예 ) 버튼세개의중요도가 1, 3, 1이면부모의전체높이를 1:3:1로등분 35

LinearLayout 주요속성 : layout_weight (2) 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"/> // 1 <EditText android:text=" 가운데에디트 " android:layout_weight="3"/> // 2 <Button android:text=" 아래쪽버튼 " android:layout_weight="1"/> // 3 </LinearLayout> [ weight1 ] [ weight2 ] 36

LinearLayout 주요속성 : layout_weight (3) 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 ] 37

LinearLayout 주요속성 : 기타 (1) padding 뷰와내용물간의간격지정 (View의속성 ) 4면모두동일한여백지정 paddingleft, paddingtop, paddingright, paddingbottom 개별여백지정 layout_margin 마진패딩 뷰와부모와의간격을지정 근처에형제뷰가있으면설정한간격으로여백생성 뷰의입장에서볼때바깥여백을뜻하며레이아웃의속성 4면모두동일한여백지정 개별여백지정가능 Button layout_marginleft, layout_marginright, layout_margintop, layout_marginbottom 패딩 마진 38

LinearLayout 주요속성 : 기타 (2) 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> [ padding1 ] 39

LinearLayout 주요속성 : 기타 (3) Layout/padding2.xml <LinearLayout android:background="#ff0000" android:layout_margin="10px"> [ padding2 ] Layout/padding3.xml <LinearLayout android:background="#ff0000" android:layout_margin="10px" android:padding="10px"> [ padding3 ] 40

RelativeLayout (1) 위젯과부모와의위치관계또는위젯끼리의관계를지정함으로써뷰를배치 ( 기준위젯에반드시 id 지정 ) 특정뷰가다른뷰의위치에종속적일때기준이되는뷰를먼저정의해야함 ex: A를 B의위에배치하고싶다면 XML 문서상에 B를먼저기술한후 A를나중에기술해야함 A B <RelativeLayout> <B android:id="@+id/b" /> <A layout_above="@id/b" /> </RelativeLayout> [ 원하는배치 ] [ XML 문서 ] 41

RelativeLayout (2) 레이아웃이배치되는순서 철수철수영희철수영희철수영희 몽룡 춘향 몽룡 좌상단에 철수오른쪽에 영희밑에 부모의오른쪽에 몽룡왼쪽에몽룡의아래쪽정렬 42

RelativeLayout (3) [ relative1 예제실행결과 ] Layout/relative1.xml <?xml version="1.0" encoding="utf-8"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" > <TextView android:id="@+id/chulsoo" android:layout_width="wrap_content" android:layout_marginright="20px" android:textsize="15pt" android:text=" 철수 "/> <TextView android:id="@+id/younghee" android:layout_width="wrap_content" android:layout_torightof="@id/chulsoo" android:textsize="15pt" android:text=" 영희 "/> <TextView android:id="@+id/mongryong" android:layout_width="wrap_content" android:layout_below="@id/younghee" android:layout_alignparentright="true" android:layout_marginleft="10px" android:textsize="15pt" android:text=" 몽룡 "/> <TextView android:id="@+id/chunhyang" android:layout_width="wrap_content" android:layout_torightof="@id/mongryong" android:layout_alignbottom="@id/mongryong" android:textsize="15pt" android:text=" 춘향 "/> </RelativeLayout> 43

RelativeLayout (4) Attribute Name android:layout_above android:layout_alignbaseline android:layout_alignbottom android:layout_alignleft android:layout_alignparentbottom android:layout_alignparentleft android:layout_alignparentright android:layout_alignparenttop android:layout_alignright android:layout_aligntop android:layout_below android:layout_centerhorizontal android:layout_centerinparent android:layout_centervertical android:layout_toleftof android:layout_torightof Description Positions the bottom edge of this view above the given anchor view ID. Positions the baseline of this view on the baseline of the given anchor view ID. Makes the bottom edge of this view match the bottom edge of the given anchor view ID. Makes the left edge of this view match the left edge of the given anchor view ID. If true, makes the bottom edge of this view match the bottom edge of the parent. If true, makes the left edge of this view match the left edge of the parent. If true, makes the right edge of this view match the right edge of the parent. If true, makes the top edge of this view match the top edge of the parent. Makes the right edge of this view match the right edge of the given anchor view ID. Makes the top edge of this view match the top edge of the given anchor view ID. Positions the top edge of this view below the given anchor view ID. If true, centers this child horizontally within its parent. If true, centers this child horizontally and vertically within its parent. If true, centers this child vertically within its parent. Positions the right edge of this view to the left of the given anchor view ID. Positions the left edge of this view to the right of the given anchor view ID. 44

RelativeLayout (5) RelativeLayout 예제 name card 좌상단의이미지를제일먼저배치하고그아래삭제버튼배치 부모의위쪽변에이름을붙이면서동시에이미지의오른쪽에배치 부모의오른쪽에전화번호를붙이되이름과베이스를맞춤 설명문자열은이름밑에붙이되왼쪽변을이름과나란히맞춤 [ 정상적인결과 ] [ 베이스를맞추지않은결과 ] 45

AbsoluteLayout 관계나순서에상관없이지정한절대좌표에차일드뷰배치 공식문서에는사용을금지함 (RelativeLayout, FrameLayout 사용 ) 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"> <TextView android:layout_width="wrap_content" android:layout_x="50px" android:layout_y="100px" android:textsize="15pt" android:text="(50,100)"/> <TextView android:layout_width="wrap_content" android:layout_x="200px" android:layout_y="70px" android:textsize="15pt" android:text="(200,70)"/> </AbsoluteLayout> 46

FrameLayout (1) 모든차일드를프레임의좌상단에배치 차일드가두개이상일때는추가된순서대로겹쳐서표시함 ViewGroup 의서브클래스 addview, removeview: 실행중에차일드를추가및삭제 getchildcount: 차일드의개수확인 필요한차일드만표시하고겹쳐진차일드는숨겨둘수있음 차일드의보임상태는개별뷰의 visibility 속성을사용하여조정하며실행중에도조건에따라뷰의보임상태를변경할수있음 47

FrameLayout (2) foreground 차일드의위쪽에살짝얹히는이미지를지정 반투명한색상, 이미지사용이가능 foregroundgravity 전경의이미지를배치할방법을지정 ( 디폴트 : fill) measureallchildren 모든차일드의크기를다측정할것인지, 보이거나숨겨진차일드의크기만적용할것인지를지정 디폴트는 false이며 GONE 상태의차일드크기는측정하지않음 48

FrameLayout (3) 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:layout_width="wrap_content" android:text="push Button"/> <ImabeView android:id="@+id/img" android:layout_width="wrap_content" android:src="@drawable/pride"/> </FrameLayout> Layout/frame.java 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); } } }); 49

TableLayout 표형식으로차일드를배치 ( 바둑판모양 ) TableRow 객체로구성되며내부에열 ( 셀 ) 이배치 셀에는차일드뷰하나를포함 크기속성에대한제약이있음 TableRow 객체의높이는항상 wrap_content로강제됨 layout_width 속성은따로지정할수없으며항상 fill_parent로가정됨 [ TableLayout 예제 ] [ TableLayout 예제 ] 50

레이아웃중첩 (1) 레이아웃끼리중첩가능 레이아웃중첩예제 NestLayout 제일바깥에 LinearLayout, 전체는수직으로뷰를배열 수직 LinearLayout 안에 TextView, Table, 수평 LinearLayout을일차차일드로배치 Table은다시 2행 3열의셀로분할되고, 각셀에는텍스트뷰를포함 수평 LinearLayout 안에는세개의 TextView를배치 TextView TextView TextView TextView 수직리니어 테이블 테이블로우 TextView TextView TextView pp. 158 ~ 159 TextView TextView TextView 수평리니어 51

레이아웃중첩 (2) 레이아웃중첩예제 MultPage 각버튼을누를때프레임내의모든페이지를일단숨긴후버튼에대응되 는페이지만을표시 [ Page 1 button ] [ Page 2 button ] [ Page 3 button ] pp. 160 ~ 164 52

실행중속성변경 (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 ) 53

실행중속성변경 (2) View Activity.findViewById (int id) View View.findViewById (int id) ID를사용하여해당뷰객체 (View) 를검색 액티비티및뷰에정의됨 액티비티에서호출시전체레이아웃에서검색 특정뷰에서검색시뷰의차일드중하나를검색 54

Layout/layout_codelayout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mylinear" android:orientation="vertical" android:layout_height="fill_parent" > <Button android:id="@+id/mybutton" android:layout_width="wrap_content" android:text=" 버튼 " /> <TextView android:id="@+id/mytext" android:layout_width="wrap_content" android:text=" 문자열 " /> <EditText android:id="@+id/myedit" android:layout_width="wrap_content" android:text=" 에디트 " /> </LinearLayout> 55

Layout/CodeLayout2.java public class CodeLayout2 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.layout_codelayout); LinearLayout MyLinear = (LinearLayout)findViewById(R.id.MyLinear); MyLinear.setOrientation(LinearLayout.HORIZONTAL); Button MyBtn = (Button)findViewById(R.id.MyButton); MyBtn.setTextSize(40); } } EditText MyEdit = (EditText)findViewById(R.id.MyEdit); MyEdit.setBackgroundColor(0xff00ff00); 56

레이아웃전개 (1) 레이아웃 (Layout) 생성할뷰의목록, 구조및속성들을열거 XML 문서를사용하여표현 액티비티에배치하기위해서는실제객체를생성해야함 이진형태로컴파일되어실행파일에내장되어실행직후에로드되어객체로변경됨 ADT 의 aapt 툴을사용 57

레이아웃전개 (2) 전개 (Inflation) XML 문서에정의된레이아웃과차일드뷰의속성을읽어실제뷰객체를생성하는과정 핵심메소드 : setcontentview( ) XML 문서의리소스 ID 를전달받아객체를생성하여액티비티를채움 58

레이아웃전개 (3) public class Inflation extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.layout_inflation); } layout_inflation.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" > <TextView android:gravity="center" android:textcolor="#ff0000" android:textsize="20px" android:text="textview" /> </LinearLayout> 59

레이아웃전개 (4) public class Inflation2 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); LinearLayout linear = new LinearLayout(this); linear.setorientation(linearlayout.vertical); linear.setbackgroundcolor(color.white); TextView text = new TextView(this); text.settext("textview"); text.setgravity(gravity.center); text.settextcolor(color.red); text.settextsize(20); } } linear.addview(text); setcontentview(linear); // 레이아웃파라미터생략 60

레이아웃전개 (5) public class Inflation3 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); /* XML 전개를직접하기 */ LayoutInflater inflater = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE); LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.layout_inflation, null); } } setcontentview(linear); 61

레이아웃전개 (6) LayoutInflater 클래스 XML 리소스를전개하여뷰객체를생성 getsysemservice( ) 메소드 개발자가직접전개하기위한시스템수준의전개자 View LayoutInflater.inflate(int resource, ViewGroup root) resource XML 리소스 root 생성할뷰의 root로사용할뷰 리소스내부에 root가있으면 null로지정 62

레이아웃전개 (7) public class Inflation3 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); /* 컨텍스트로부터전개자구하기 */ LayoutInflater inflater = LayoutInflater.from(this); LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.layout_inflation, null); } } setcontentview(linear); 63

레이아웃전개 (8) static LayoutInflater LayouotInflater.from(Context context) LayoutInflater 클래스의정적메소드 컨텍스트를인수로전달하여전개자생성 생성한전개자의 inflate 메소드를호출 Activity는 Context의서브클래스임 this 를인자로사용 64

레이아웃전개 (9) public class Inflation3 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); /* View 의정적메소드사용하여전개하기 */ LinearLayout linear = (LinearLayout)View.inflate( this, R.layout.layout_inflation, null ); } } setcontentview(linear); 65

레이아웃전개 (10) static View inflate (Context context, int resource, ViewGroup root) View의정적메서드 가장짧은길이의코드 66

레이아웃전개 (11) 사용용도 특정뷰혹은뷰그룹하나만을전개 layout_mytext.xml <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/ap k/res/android" android:gravity="center" android:textcolor="#ff0000" android:textsize="20px" android:text="textview" /> public class Inflation4 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); } } LinearLayout linear = new LinearLayout(this); linear.setorientation(linearlayout.vertical); linear.setbackgroundcolor(color.white); TextView text = (TextView)View.inflate( this, R.layout.layout_mytext, null); linear.addview(text); // 레이아웃파라미터생략 setcontentview(linear); 67

레이아웃파라미터 (1) 뷰가배치되는부모, 즉레이아웃의속성으로부모에게차일드뷰를배치할방법지시 뷰외부와의관계지정 "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 68

레이아웃파라미터 (2) Object LinearLayout.LayoutParams ViewGroup.LayoutParams ViewGroup.MarginLayoutParams RelativeLayout.LayoutParams FrameLayout.LayoutParams 69

레이아웃파라미터 (3) 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"> <TextView android:layout_width="wrap_content" android:textcolor="#ff0000" android:textsize="20px" android:text="textvieiw" android:background="#00ff00"/> </LinearLayout> 70

Layout/LayoutParameter2.java public class LayoutParameter2 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); LinearLayout linear = new LinearLayout(this); linear.setorientation(linearlayout.vertical); linear.setgravity(gravity.center); linear.setbackgroundcolor(color.white); TextView text = new TextView(this); text.settext("textview"); text.settextcolor(color.red); text.settextsize(20); text.setbackgroundcolor(color.green); LinearLayout.LayoutParams paramtext = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); linear.addview(text, paramtext); } } setcontentview(linear); 71

레이아웃파라미터설정을생략한경우 72

레이아웃파라미터 (4) Layout/MarginParameter.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_width="wrap_content" android:layout_height="fill_parent" android:text="button With Margin" android:layout_margintop="30px" android:layout_marginbottom="30px"/> </LinearLayout> 73

Layout/MarginParameter2.java public class MarginParameter2 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); LinearLayout linear = new LinearLayout(this); linear.setorientation(linearlayout.vertical); linear.setbackgroundcolor(color.white); Button btn = new Button(this); btn.settext("button With Margin"); LinearLayout.LayoutParams parambtn = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.FILL_PARENT); parambtn.setmargins(0, 30, 0, 30); linear.addview(btn, parambtn); } } setcontentview(linear); 74

Lab Layout Test RelativeLayout 사용 arrow.png 사용 layout_margin 계열사용 75