Android Mobile Application Development Part 2
Agenda Part 1 Build Develop Environment Create new Project Composition of Project Simulate Application Part 2 User Interface Activity Toast Preference Log
User Interface Android Application UI 다루기
User Interface (1/3) User Interface of Android Java View & ViewGroup View Hierarchy ViewGroup ViewGroup View View View View View
User Interface (2/3) View ViewGroup View Object ViewGroup Object 안드로이드플랫폼상의사용자인터페이스를표현하는기본단위 안드로이드플랫폼상의 View 와 ViewGroup 의묶음단위 SubClass : Widget SubClass : Layout Button, TextField, etc Linear, Relative, Tabular, etc
User Interface (3/3) View & ViewGroup 의구성 LinearLay out LinearLay out LinearLay out Button Button Button Button
Activity Activity 안드로이드에서의과제 / 작업의단위 Widget 과 Layout 을제어한다. android.app.activity Class 응용프로그램의각화면마다 Activity 를정의하고구현하는데많은시간을 들이게된다. Example 시동 / 스플래시화면 주메뉴화면 기능 1 화면 기능 2 화면 Splash Activity Main Menu Activity 하나의 Activity 는하나의 App. 화면을대표 기본적으로 Activity 마다 UI 파일각각정의 Function 1. Activity Function 2. Activity
User Interface & Activity VG VG VG VG Splash Activity VG V V V V VG V UI Event Main Menu Activity V V V V Function 1. Activity Function 2. Activity Layout Hierarchy Activity Hierarchy Handle
Summary 안드로이드의 UI 는 View 와 ViewGroup 으로이루어진구조를갖고있다. View 에는 Widget, ViewGroup 에는 Layout 이라는 Sub Class 가있다. 안드로이드응용프로그램은 Activity Class 라는실행단위를갖는다. 하나의 Activity Class 는하나의 UI 로부터 Event 를받아 Handling 한다.
Widget View View Object android.widget 패키지 각각의 widget 은태그로구분되며 속성이존재한다. 안드로이드플랫폼상의사용자인터페이스를표현하는기본단위 SubClass : Button, TextField, etc TextView 화면에문자를출력 Button 사용자의선택입력 EditText 문자입력
Layout ViewGroup ViewGroup Object 안드로이드플랫폼상의 View 와 ViewGroup 의묶음단위 SubClass : Linear, Relative, Tabular, etc android.layout 패키지 웹디자이너들이 HTML 을사용하는것과 비슷하게, 안드로이드응용프로그램의 사용자인터페이스디자이너는 XML 을 이용한다. Linear Layout View 들을차곡차곡쌓는 ( 선형적으로 ) 배치 ( 가장많이사용 ) Relative Layout 부모와자식, 자식과자식간의상대적인배치 Frame Layout 좌측상단에겹쳐서쌓는배치 Table Layout 표형태로배치
User Interface Development Usage Case1: xml 파일에미리정의 Compile Time xml 파일에정의된 view, viewgroup의 id를이용하여 activity class에서 findviewbyid() 메서드로연결하여 Event를 Handling 한다. Case2: Activity class 에서동적으로생성 Run Time Activity class 내부에서 view/viewgroup 객체를생성하여현재화면에 addview() 메서드로추가할수있다.
Usage Case1 (1/4) xml 파일에서정의후 Activity 에서 ID 를찾는다. 1. xml 파일에 TextView 추가 2. Activity class 에서 TextView 선언 3. Activity 에서 findviewbyid 메서드로할당 레이아웃 (xml) 과소스코드 (activity) 를연결
Usage Case1 (2/4)
Usage Case1 (3/4)
Usage Case1 (4/4) TextView 패키지 TextView 객체선언 xml 파일에정의된 textview1 과연결
Usage Case2 (1/3) Activity에서생성후 Layout에표시한다. 1. Activity에서 TextView 생성 new 메서드사용 2. TextView 객체를 ContentView 로생성 setcontentview 메서드사용
Usage Case2 (2/3)
Usage Case2 (3/3)
Other facts Listener (implementation in Activity) 객체에서 Event가발생하였을때이를감지하고수용하여실행되는함수 Widget이발생시키는 UI Event도 Handling Ex.) Touch, KeyPress, SensorDataReceive, Properties (setup in xml file) Widget의속성 Ex.) Size, Padding, ImageResource,
Example (1/4) TextView, Button, EditText 를이용하여버튼을누르면편집한문자열이출력되는예제 main.xml
Example (2/4) Activity Class 2. 객체할당 1. 객체선언 3. Listener 등록
Example (3/4) Hierarchy Hierarchy 구성된화면실제화면
Example (4/4) Properties <TextView android:id="@+id/textview1" android:textsize="40dp" android:layout_height="wrap_content" android:layout_width="fill_parent" android:gravity="center" android:layout_weight="1" android:text="massage" > <EditText android:id="@+id/edittext1" android:textsize="20dp" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="enter Text" android:layout_weight="1" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/linearlayout1" android:orientation="horizontal" android:layout_weight="0" > <Button android:layout_width="wrap_content" android:layout_gravity="center" android:textsize="20dp" android:id="@+id/button1" android:layout_height="wrap_content" android:layout_weight="0" android:text="refresh" > xml code
Summary Xml 파일에정의하여 Activity 로불러옴 Activity Class 에서동적으로생성 Listener 를이용하여 Event Handling Property 를이용하여 UI Design
Activity Application 의실행단위
Activity 프로그램에서의 화면하나 반드시 View 나 View Group 를가져야한다. Activity 는서로중첩되지않으며독립적이다.(View 는중첩된다.) 프로세스도독립적이므로데이터의전달이쉽지않다.
LifeCycle 3 States in Activity Activated 화면의전면에출력 Paused 화면에는출력되지만포커스를잃음 Popup, Notification Stopped 화면에서완전히사라짐
Activity 실행 (1/2) 1 Message (Intent) Broker (Android OS) Caller (Activity) Callee (Activity) Application (Android Package) Message (Intent) 2 1. Caller Activity 가 Message 를생성하여 OS 에게전달 2. OS 는받은메시지에명시되어있는데로 Callee Activity 를실행 Android 는 OSGi(Open Service Gateway initiative) 의 Bundle 실행개념을도입했다.
Activity 실행 (2/2) 1 Message (Intent) Broker (Android OS) Message (Intent) 2 Caller (Activity) Other (Activity) Callee (Activity) Other (Activity) Application (Android Package) Application (Android Package) Intent Filter 를사용하면다른 Application 의 Activity 도호출할수있다.
Activity 간의통신 (1/3) Caller.java Activity 실제실행경로 Callee.java Activity new intent +Caller, +Callee getintent putextra +TextIn TextIn 데이터이동 ( 개념 ) getstringextra TextIn startactivityforresult new intent onactivityresult putextra +TextOut getstringextra TextOut TextOut setresut
Activity 간의통신 (2/3) 순서 Activity 동작 함수 1 Caller Intent를생성하여 Caller와 Callee 명시 Intent 생성자 2 Caller Intent에 TextIn 이라는문자열삽입 putextra() 3 Caller 결과값을리턴받는것을명시하며 Intent를 OS에게전달 startactivityforresult() 4 Callee OS에의해서실행 5 Callee OS가전달한 Intent를받음 getintent() 6 Callee 전달받은 Intent에서 TextIn이라는문자열추출 getstringextra() 7 Callee 새로운 Intent를생성 Intent 생성자 8 Callee Intent에 TextOut 이라는문자열삽입 putextra() 9 Callee 결과값을 Caller에게전달 setresult() 10 Caller 이벤트헨들러로 Callee가전달한 Intent를받음 onactivityresult() 11 Caller 전달받은 Intent에서 TextOut 이라는문자열추출 getstringextra()
Activity 간의통신 (3/3) Intent Class 값을저장하는 Method Intent putextra(string name, int value) Intent putextra(string name, String value) Intent putextra(string name, boolean value) 저장된값을꺼내오는 Method int getintextra(string name, int defaultvalue) String getstringextra(string name) boolean getbooleanextra(string name, boolean defaultvalue) Activity Class 리턴값을돌려받기위해누가호출했는지알려주는 Method public void startactivityforresult(intent intent, int requestcode) 리턴값을돌려받는 Method protected void onactivityresult(int requestcode, int resultcode, Intent data)
Toast 간단한팝업창
Toast (1/2) Application 에서발생한 Event 를 visual 하게화면에뿌려주는 Class 시스템전체에서 1 개만존재 다른 Application이사용중이면자동으로기다렸다출력 현재 Toast를취소하고출력가능 옵션 Text 출력 이미지출력 위치지정
Toast (2/2) 생성 Method static Toast maketoast(context context, int resid, int duration) context : 메시지를출력하는주체 MainActivity.this resid : 출력할문자열의 ID R.String.name duration : 메시지출력지속시간 LENGTH_SHORT(2 초 ), LENGTH_LONG(3.5 초 ) static Toast maketoast(context context, CharSequence text, int duration) 옵션 Method text : 출력할메시지 LifecareScienceLAB void setgravity(int gravity, int, xoffset, int yoffset) void setmargin(float horizonmargin, float verticalmargin) void settext(charsequence s) void setduration(int duration) void setview(view view) 메시지를보이거나숨기는 Method void show() void cancel()
Preference 설정값 / 이전상태등을저장
Preference 응용프로그램의정보를영구적 (not in RAM) 으로저장하는방식 Simple File I/O Store in Inner Memory 1MB 미만의저용량데이터저장에유용 설정값저장 이전실행상태저장 최소단위 4kB
Preference Import Import Package import android.content.sharedpreferences; Preference 선언 SharedPreferences setting; setting = getsharedpreferences( APPLICATION", 0); Import Variable 고유한이름 ( APPLICATION ) 으로 Preference 를 Load 한다. int setting.getint(string key, int defvalue) Key 라는이름으로저장된정수를가져온다. 저장되어있지않으면 defvalue 를반환 String setting.getstring(string key, String defvalue) Key 라는이름으로저장된문자열을가져온다. 저장되어있지않으면 defvalue 를 반환 boolean setting.getboolean(string key, boolean defvalue) Key 라는이름으로저장된논리형변수를가져온다. 저장되어있지않으면 defvalue 를반환
Preference Export Import Package import android.content.sharedpreferences; Preference 선언 SharedPreferences.Editor preeditor; preeditor = setting.edit(); 기존에선언되어있는 Preference로부터 Editor를 Load한다. Export Variable preeditor.putint(string key, int Value) Key 라는이름의정수형변수내보내기, putstring/putboolean 등도가능 preeditor.commit() 변수저장을확정한다. 변수를내보낸후 commit() 을호출해야적용된다. preeditor.remove(string Key) Key 라는이름의변수를삭제한다. preeditor.clear() 현재저장되어있는모든변수를삭제한다.
Log Eclipse 로실행중인 Application 의상태확인하기
Log (1/2) 개발자를위한디버깅용메시지 Eclipse를통해서확인가능 LogCat을이용하여확인 다양한메시지필터 Log.v : verbose Log.i : information Log.w : warning Log.e : error Log.d : debugging Log.x(String tag, String msg) tag : 사용자정의메시지분류 msg : 출력할메시지 E-2
Log (2/2) E-1
Summary Android Application 은 XML 형식의 User Interface 를지원한다. Activity 는 Application 의최소실행단위로각화면마다이를정의하고구현하는데많은비용이소모된다. 각각의 Activity 는 OS 내에서독립적으로실행되어서로보호받지만메모리공유가어렵다. Anrdoid 는 OSGi 의개념을수용하여 Acticity 를실행할때 Broker 를거치게된다. END