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

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

어댑터뷰

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

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

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

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

리니어레이아웃 - 2 -

13ÀåÃß°¡ºÐ

( )부록

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

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

<BFF8B5E5B7CEC0CCB5E5322E687770>

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

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

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

콘텐츠 PowerPoint 디자인

PowerPoint 프레젠테이션

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

슬라이드 1

2_안드로이드UI

슬라이드 1

03장

PowerPoint Template

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

제11장 프로세스와 쓰레드

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

PowerPoint Presentation

gnu-lee-oop-kor-lec10-1-chap10

PowerPoint Presentation

안드로이드2_14

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

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

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

<4D F736F F F696E74202D205BC3D6C1BE5D3133C1D6C2F720B8AEBDBAC6AEBAE420B0ADC0C7C0DAB7E12D >

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

슬라이드 1

Microsoft PowerPoint - 06-Chapter09-Event.ppt

오버라이딩 (Overriding)

학습목표 인텐트로다른액티비티나프로그램을실행시킬수있다. 웹뷰를통해웹화면을액티비티화면의일부로구성할수있다. 자바스크립트를통해안드로이드프로그램을호출하는방법을안다. 안드로이드응용프로그램에서웹서비스를이용하는방법을안다.

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

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

Microsoft PowerPoint - CSharp-10-예외처리

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

Microsoft Word - R 선관위 최종 보고서(완성본).docx

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

PowerPoint Presentation

Microsoft PowerPoint UI-Layout.Menu.pptx

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

Daum 카페

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

01장

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

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

C++ Programming

Visual Basic 반복문

PowerPoint 프레젠테이션

PowerPoint Template

JAVA PROGRAMMING 실습 08.다형성

JMF3_심빈구.PDF

헬로, 안드로이드 7 주차 멀티미디어 강대기동서대학교컴퓨터정보공학부

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

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Cluster management software

슬라이드 1

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

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

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

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

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

JUNIT 실습및발표

PowerPoint Presentation

Network Programming

스레드의우선순위 우선순위설정메소드 : void setpriority(int newpriority) newpriority 에설정할수있는등급 : 1( 가장낮은우선순위 ) 부터 10( 가장높은우선순위 ) 가장높은우선순위 : MAX_PRIORITY, 보통우선순위 : NORM_

Javascript

UI TASK & KEY EVENT

레이아웃 (Layout)

Design Issues

PowerPoint 프레젠테이션

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

비긴쿡-자바 00앞부속

Microsoft PowerPoint - 2강

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 14주차 강의자료

헬로, 안드로이드 11 주차 위치파악하기와감지하기 강대기동서대학교컴퓨터정보공학부

PowerPoint Presentation

rmi_박준용_final.PDF

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

9장.예외와 단정

ThisJava ..

Transcription:

크기에사용할수있는단위 표기 단위 설명 px 픽셀수 사용중화면에서의픽셀수, 해상도가높아지면픽셀의물리적인크기가줄어든다. in 인치 사용중화면에서의인치단위의길이 mm 밀리미터 사용중화면에서의밀리미터단위의길이 pt 포인트수 사용중화면에서의 1/72 인치를 1 포인트로하는길이 dp 해상도에의존하지않는픽셀수 1은해상도가 180dpi일때 1 픽셀. 10dp가 160dpi일때에는 10픽셀, 320dpi일때에는 20픽셀이된다. sp 폰트사이즈를고려한픽셀수 사용자가설정하고있는폰트사이즈를고려한스케일된픽셀수. 실제의픽셀수는사용중인화면의해상도와폰트사이즈에의해달라진다. dpi(dot per inch) 의약자로 1인치 (2.54cm) 당들어가는점의수를말한다. 이값이클수록같은공간안에더많 은점이있어서더욱선명하다. 즉, 150dpi 보다 300dpi 가더욱선명하다. 안드로이드위젯 (widget) : android.widget 패키지에존재 위젯이름 ( 클래스이름 ) TextView EditText AutoCompleteTextView ImageView VideoView Button CompoundButton CheckBox RadioButton RadioGroup ImageButton DatePicker TimePicker 설명읽기전용의문자열출력용편집이가능한문자열입력상자사용자의입력에맞추어서미리정의된문자열을보여주는 TextView 아이콘이나사진등의이미지를표시동영상을재상버튼체크와해제의두가지상태를갖는버튼체크와해제의두가지상태를갖는체크박스체크와해제의두가지상태를갖는라디오버튼여러개의라디오버튼중하나만을체크상태로하는버튼그룹이미지를표시할수있는버튼년월일을달력에서선택시간을선택 - 1 -

뷰그룹 ( 레이아웃 ) 레이아웃이름 ( 클래스이름 ) FrameLayout LinearLayout 설명단일객체를표현하기위한프레임. 왼쪽상단에하나의뷰를배치하기때문에나중 에그린객체만보여준다. 수평또는수직으로자손의뷰를배치. 뷰가들어갈만한공간이없을때는자동으로 스크롤바가나타난다. TableLayout 행과열을기즌표형태로나타나며가장큰요소의크기로셀을설정하며셀테두리는은닉된다. AbsoluteLayout 프로그래머가뷰의위치를좌표값으로지정한다. RelativeLayout 부모의뷰나자손의뷰끼리의상대적인위치를지정한다. Gallery 이미지를수평으로스크롤하여보여준다. GridView 격자모양 ( 눈금구조 ) 으로보여준다. ListView 스크롤되는하나의컬럼리스트를보여준다. ScrollView 수직으로구성요소의열을스크롤하게한다. Spinner 콤보박스역할을한다. SurfaceView Low level로그리기를지원한다. TabHost 탭으로액티비티를전환하도록탭선택목록을지원한다. ViewFlipper 슬라이드쇼처럼시간주기로아이템을변경한다. - 2 -

다양한버튼만들기 - 3 -

화면설계 (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:layout_height="wrap_content" android:text=" 다양한버튼살피기 "/> <LinearLayout android:id="@+id/linearlayout01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/checkbox" android:text=" 체크박스 "></CheckBox> </LinearLayout> <LinearLayout android:id="@+id/linearlayout02" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/textview01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 선택한것 : 없슴 "></TextView> <RadioGroup android:id="@+id/radiogroup01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RadioButton android:id="@+id/radiobutton01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 라디오버튼 1"></RadioButton> <RadioButton android:id="@+id/radiobutton02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 라디오버튼 2"></RadioButton> <RadioButton android:id="@+id/radiobutton03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 라디오버튼 3"></RadioButton> <RadioButton android:id="@+id/radiobutton04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 라디오버튼 4"></RadioButton> </RadioGroup> </LinearLayout> <LinearLayout android:id="@+id/linearlayout03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ToggleButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/toggle_button" android:text=" 토글 " android:textoff=" 해제상태 " android:texton=" 선택상태 "></ToggleButton> <TextView android:layout_height="wrap_content" android:text=" 클릭해보세요." android:gravity="center_vertical" android:id="@+id/text_feature"></textview> - 4 -

</LinearLayout> <LinearLayout android:id="@+id/linearlayout04" android:orientation="vertical" android:gravity="center" android:layout_height="fill_parent"> <Button android:id="@+id/button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 종료버튼 "></Button> </LinearLayout> <LinearLayout android:id="@+id/linearlayout05" android:layout_height="fill_parent" android:gravity="bottom"> <Button android:id="@+id/button02" android:layout_height="wrap_content" android:text="submit" android:gravity="center" ></Button> </LinearLayout> </LinearLayout> - 5 -

자바클래스 public class UIDemo2 extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); // 화면디자인에서설계한버튼을불러온다. 왜? 버튼을클릭할때발생하는이벤트를처리하기위해서. final CheckBox check_button = (CheckBox)findViewById(R.id.checkbox); // 참고내부클래스나익명클래스에서사용하는외부의변수는 ( 여기서는 check_button) 반드시 final // 로선언되어야한다. check_button.setonclicklistener(new View.OnClickListener() {// 익명클래스를이용한이벤트처리 ); public void onclick(view v) {// 버튼클릭이벤트처리 TextView tv = (TextView)findViewById(R.id.checkbox); tv.settext(check_button.ischecked()? " 체크상태 " : " 체크해제 "); final RadioGroup group = (RadioGroup)findViewById(R.id.RadioGroup01); group.setoncheckedchangelistener(new RadioGroup.OnCheckedChangeListener() { public void oncheckedchanged(radiogroup group, int checkedid) { TextView tv = (TextView)findViewById(R.id.TextView01); if(checkedid!= -1) { RadioButton rb = (RadioButton)findViewById(checkedId); if(rb!= null) tv.settext(" 선택한것 :" + rb.gettext()); else { tv.settext(" 없슴 "); ); - 6 -

final Button clear_choice = (Button)findViewById(R.id.Button01); clear_choice.setonclicklistener(new View.OnClickListener() { ); public void onclick(view v) { RadioGroup group = (RadioGroup)findViewById(R.id.RadioGroup01); if(group!= null) group.clearcheck(); final ToggleButton toggle_button = (ToggleButton)findViewById(R.id.toggle_button); toggle_button.setonclicklistener(new View.OnClickListener() { ); public void onclick(view v) { TextView tv = (TextView)findViewById(R.id.text_feature); tv.settext(toggle_button.ischecked()? " 온상태 " : " 오프상태 "); - 7 -

키이벤트처리 키에관련된이벤트는사용자가아이템을포커스를하여장치에있는키를누르거나놓을때발생한다. 키가눌렸을 때에는 onkeydown() 메소드가, 키를놓았을때에는 onkeyup() 메소드가호출된다. onkeyup() 과 onkeydown() 메소드는 View.OnKeyListener 에서사용된다. 키이벤트처리예제 사용자가화면을조작하면조작할때발생하는이벤트의정보가로그를통해서출력된다. DDMS 를통해서로그정보를 확인하도록한다. - 8 -

화면설계 (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:layout_height="wrap_content" android:text="@string/hello" /> <Button android:id="@+id/button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 롱클릭처리 "></Button> <EditText android:id="@+id/edittext01" android:layout_height="wrap_content" android:text=" 포커스처리 "></EditText> <EditText android:id="@+id/edittext02" android:layout_height="wrap_content" ></EditText> </LinearLayout> - 9 -

자바클래스 public class EventDemo extends Activity { private static final String DebugTAG = "EventDemoActivity";//DDMS 의로그출력에사용할로그의이름 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); Button button = (Button)findViewById(R.id.Button01);// 화면설계에사용된버튼을불러온다. button.setonlongclicklistener(new View.OnLongClickListener() { public boolean onlongclick(view v) { Log.i(DebugTAG, "onlongclick"); return true; ); TextView focustext = (TextView)findViewById(R.id.EditText01);// 화면설계에사용된텍스트뷰를불러옴 focustext.setonfocuschangelistener(new View.OnFocusChangeListener() { String msavetext = ""; public void onfocuschange(view v, boolean hasfocus) { if(hasfocus) { if(msavetext!= null) ((TextView)v).setText(mSaveText); else { msavetext = ((TextView)v).getText().toString(); ((TextView)v).setText(""); ); //The end of oncreate() public boolean onkeydown(int keycode, KeyEvent event) { Log.d(DebugTAG, "onkeydowm = " + keycode); return super.onkeydown(keycode, event); public boolean onkeyup(int keycode, KeyEvent event) { Log.d(DebugTAG, "onkeyup = " + keycode); return super.onkeyup(keycode, event); - 10 -

ArrayAdapter 안드로이드에서는배열의내용을위젯에출력하기위해서 ArrayAdapter 를사용한다. 사용예 ) private String[] items = {" 항목 1", " 항목 2", " 항목 3"; ArrayAdapter<String> adapter = new ArrayDapter<String>(this, android.r.layout.simple_list_item_1, items); this : 어댑터가포함되어있는인스턴스지정 android.r.layout.simple_list_item_1 : 안드로이드시스템에서제공하는위젯의이름. 즉, 사용자가생성해서사용하는위젯이아니라시스템자체에서사용하는위젯의이름. 배열의값을안드로이드내부에서사용하는리스트에저장한다. items : 화면에출력할실제내용이들어있는배열의이름 사용자가생성한위젯은 R 클래스에서찾을수있으며, 시스템에서생성한위젯은 android.r 클래스에서찾는다. - 11 -

ListView 안드로이드에서리스트박스를구현할때사용하는위젯이다. ListView 는배열, 리스트, 데이터베이스내의여러가지 데이터항목들을출력하는데사용한다. 화면설계 (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:layout_height="wrap_content" android:text="@string/hello" /> <ListView android:id="@+id/listview01" android:layout_height="wrap_content" ></ListView> </LinearLayout> - 12 -

자바클래스 public class ListViewDemo2 extends Activity { private String[] items = {" 항목 1", " 항목 2", " 항목 3";// 화면에출력할항목들 public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.r.layout.simple_expandable_list_item_1, items); // 배열을출력하기위해서 ArrayAdapter 를생성한다. ListView lv = (ListView)findViewById(R.id.ListView01); lv.setadapter(adapter);// 리스트뷰에서사용하는어댑터를 ArrayAdapter로설정한다. lv.setonitemclicklistener(new AdapterView.OnItemClickListener() { public void onitemclick(adapterview<?> arg0, View arg1, int arg2, long arg3) { Toast.makeText(ListViewDemo2.this, "Clicked_id=" + arg3, Toast.LENGTH_SHORT).show(); // 리스트에서선택한내용이토스트에출력된다. ); - 13 -

Spinner 콤보박스와같이드롭다운선택기능을구현하기위하여안드로이드에서제공하는위젯이다. - 14 -

화면설계 (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:id="@+id/selection" android:layout_height="wrap_content" /> <Spinner android:id="@+id/spinner" android:layout_height="wrap_content" android:drawselectorontop="true" ></Spinner> </LinearLayout> - 15 -

자바클래스 public class SpinnerDemo extends Activity implements AdapterView.OnItemSelectedListener{ TextView selection; String[] items = {"Lorem", "ipsum", "dolor", "sit", "amet", "consectituer", "adipiscing", "elit", "morbi", "vel", "ligula", "vitae", "arcu", "aliquet", "mollis", "etiam", "vel", "erat", "placerat", "ante", "porttitor", "sodales", "sodales", "pellentesque", "augue", "purus" ;// 메뉴에사용할이름들. public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); selection = (TextView)findViewById(R.id.selection); Spinner spin = (Spinner)findViewById(R.id.spinner); spin.setonitemselectedlistener(this); ArrayAdapter aa = new ArrayAdapter(this, android.r.layout.simple_spinner_item, items); aa.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spin.setadapter(aa); public void onitemselected(adapterview parent, View v, int position, long id) { selection.settext(items[position]); public void onnothingselected(adapterview parent) { selection.settext(""); - 16 -

자동완성기능구현하기문자열의일부만입력해도입력한문자로시작되는단어나입력한문자가포함된단어들을쭉나열해보여준다. AutoCompleteTextView클래스를사용해서이기능을구현한다. 이클래스는 EditView 클래스를상속한클래스로 EditView의속성을그대로사용할수있다. AutoCompleteTextView 클래스의 android:completionthreashold 속성은사용자가자동완성드롭다운목록이표시되는지를설정한다. 또한, android:layout_height의속성값은 "wrap_content" 로설정해야드롭다운목록이보인다. AutoCompleteTextView는 TextWatcher 리스너를통해서입력되는텍스트가변경될때마다이벤트를받아와서처리할수있다. 화면설계 (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:id="@+id/country" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="country" /> <AutoCompleteTextView android:id="@+id/edit" android:layout_height="wrap_content" android:completionthreshold="1"/> </LinearLayout> - 17 -

자바클래스 public class AutoCompleteDemo extends Activity implements TextWatcher{ TextView country; AutoCompleteTextView edit; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); country = (TextView) findviewbyid(r.id.country); edit = (AutoCompleteTextView) findviewbyid(r.id.edit); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.r.layout.simple_dropdown_item_1line, COUNTRIES); //android.r.layout.simple_dropdown_item_1line은안드로이드시스템이자체적으로사용하는 // 드롭다운위젯의이름이다. COUNTRIES는출력될내용이저장된배열의이름이다. edit.setadapter(adapter); edit.addtextchangedlistener(this);//autocompletetextview 위젯에리스너를붙인다. public void ontextchanged(charsequence s, int start, int before, int count) { country.settext(edit.gettext());// 입력이발생하면 TextView 에입력된내용을출력한다. //TextWatcher 리스너가가지고있는메소드 public void aftertextchanged(editable s) { //TextWatcher 리스너가가지고있는메소드 public void beforetextchanged(charsequence s, int start, int count, int after) { //TextWatcher 리스너가가지고있는메소드 static final String[] COUNTRIES = new String[] { "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil";// 알파벳 A와 B로시작하는국가이름 - 18 -

Handler 안드로이드에서스레드에게메시지를전송하는방법은 Handler 클래스를상속받는방법이다. 액티비티별로하나만만들면충분하고, 별도의작업은필요없다. Handler 인스턴스를생성하기만하면안드로이드스레드시스템에자동으로등록된다. 핸들러인스턴스와통신하는방법으로는메시지를이용한방법이있다. 핸들러인스턴스에메시지를전달하려면 obtainmessage() 메소드를호출해서 Message 인스턴스를확보해서 sendmessage() 를사용하거나빈메시지를 setndemptymessage() 메소드로보낸다. 핸들러를사용하는방법... Handler handler = new Handler() { public void handlemessage(message msg) { // 핸들러에메시지를전송하면수행할작업 ;// 익명클래스를만드는방법을사용해서핸들러클래스를만들었다.... Thread background = new Thread(new Runnable() {//Runnable 인터페이스를상속해서무명클래스를생성함 public void run() { try { Thread.sleep(1000);//1초동안대기 handler.sendmessage(handler.obtainmessage()); // 핸들러객체로부터메시지객체를얻어오자마자이메시지객체를핸들러로전송한다. // 그러면, 위의 handlemessage() 메소드에기술된작업이처리된다. catch(exception t) { ); // 예외처리 - 19 -

HandlerDemo 실행결과 - 20 -

화면설계 (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" > <ProgressBar android:layout_height="wrap_content" android:id="@+id/progress" style="?android:attr/progressbarstylehorizontal" > </ProgressBar> </LinearLayout> - 21 -

자바클래스 public class HandlerDemo extends Activity { ProgressBar bar; Handler handler=new Handler() { public void handlemessage(message msg) {// 핸들러객체로메세지가전송되면실행된다. bar.incrementprogressby(5); ; boolean isrunning=false; public void oncreate(bundle icicle) { super.oncreate(icicle); setcontentview(r.layout.main); bar=(progressbar)findviewbyid(r.id.progress); public void onstart() { super.onstart(); bar.setprogress(0);// 상태바의상태를 0으로초기화한다. Thread background=new Thread(new Runnable() { public void run() { try { for (int i=0;i<20 && isrunning;i++) { Thread.sleep(1000);//1초동안대기 handler.sendmessage(handler.obtainmessage()); // 핸들러객체로메세지를전송한다. catch (Throwable t) { // just end the background thread ); isrunning=true; background.start();// 스레드를실행한다. public void onstop() { super.onstop(); isrunning=false; - 22 -