TOMPA [Android] - 유저 인터페이스

2011. 9. 27. 21:14카테고리 없음

액티비티 자체는 화면에 직접적으로 보이지 않으며 사용자를 대면하는 실체는 액티비티 안의 뷰이다. 뷰 여러개가 모여서 액티비티를 구성하고, 액티비티 여러 개가 모여서 응용 프로그램이 된다. 뷰는 안드로이드의 UI를 구성하는 핵심 컴포넌트로서 화면상의 사각 영역에 자신의 모양을 그리고 사용자의 입력을 받아들인다.

1. 각종 레이아웃tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- LinearLayout : 차일드 뷰를 일렬로 배치하는 레이아웃, XML 문서에 나타나는 순서대로 뷰가 차곡차곡 배치된다.

- RelativeLayout : 위젯과 부모와의 관계 또는 위젯끼리의 관계를 지정함으로써 뷰를 배치하는 레이아웃, 기준이 되는 위젯에 id를 반드시 지정해야 한다. Relative의 주요 속성들은 모두 레이아웃의 속성이므로 layout_ 접두가 붙어 있다.tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- AbsoluteLayout : Relative의 반대 속성을 가지는 레이아웃이다. 관계나 순서에 상관없이 지정한 절대 좌표에 차일드 뷰를 무식하게 배치한다.

- FrameLayout : 차일드를 배치하는 규칙이 따로 없고 모든 차일드는 프레임의 좌상단에 나타난다. 차일드가 두 개 이상일 때는 추가된 순서대로 겹쳐서 표시된다. 먼저 추가된 차일드가 아래쪽에 깔리고 나중에 추가된 차일드가 위쪽에 겹쳐진다.tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- Table Layout : 표 형식으로 차일드를 배치하는 레이아웃, 테이블은 임의 개수의 TableRow 객체로 구성되며, TableRow 객체 하나가 곧 행이다. TableRow안에는 임의 개수의 열이 배치되는데 행 안의 열 하나를 셀이라고 부르며 셀당 차일드 뷰 하나씩이 들어간다. TableRow 객체의 높이는 항상 wrap_content로 강제된다. 또 셀에 배치되는 자식 뷰는 무조건 주어진 셀 안에 배치되므로 layout_width 속성은 따로 지정할 수 없으며 항상 fill_parent로 가정된다.tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

2. ContextMenutompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 특정 뷰나 항목에 필요한 명령들만 모아 놓은 메뉴이다. 뷰를 롱클릭 하거나 키패드의 가운데 버튼을 누르면 중앙에 context 메뉴가 열린다.

- context 메뉴를 달고 싶은 뷰는 registerForContextMenu(View view)로 등록해야 한다.tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 등록해 놓으면 OnCreateContextMenuListener가 액티비티 자신으로 등록되고 뷰 위에서 롱 클릭 등이 검출되면

onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)를 호출하여 특정 뷰에 대한 context 메뉴 생성 기회를 제공한다.

- context 메뉴의 항목을 선택하면 onCreateItemSelected(MenuItem item) 메서드가 호출된다.

- menu.setHeaderTitle(" "), menu.add(0,1,0," ")tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 아이콘을 달아 장식할 수는 없지만 체크박스나 라디오 그룹으로 항목에 대한 옵션을 선택할 수 있따.

3. optionMenutompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 최대 6개까지의 항목을 가질 수 있으며 6개가 넘으면 5번째 메뉴까지만 나타나고 나머지는 More 항목안에 숨어 있다가 확장 메뉴 형태로 나타난다. 아이콘을 달아 장식할 수 있지만 체크박스나 라디오 그룹을 구성할 수는 없다. 단순히 명령을 입력 받을 수만 있다.

- 서브메뉴에 대해서는 또다른 서브 메뉴를 중첩할 수 없다.

- 장비의 MENU 버튼을 누르면 onCreateOptionsMenu(Menu menu) 메서드가 호출된다.

- MenuItem add(int groupId, int itemId, int order, CharSequence title)

- SubMenu addSubMenu(int titleRes)tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

4. EventListener ( 6가지 사용방법, p.313)

- vw.setOnTouchListener(new View.OnTouchListener(){ // button의 경우 View에 Button

public boolean onTouch(View v, MotionEvent event){

}});tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

5. Toasttompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

Toast.makeText(액티비티.this, “메시지”, Toast.LENGTH_SHORT).show();

6. Progress Dialogtompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 막대모양일 때는 style 지정을 해줘야한다. 음수 사용가능

- 타이틀 바에 프로그래스를 표시할 수도 있음 ( requestWindowFeature(int featureId)) setContentView보다 먼저 호출해야한다.

- 타이틀바 프로그래스의 경우 범위를 따로 지정할 수 없고 0~10000의 고정된 범위를 가진다.

- setProgressBarVisibility(true); setProgress(5000);

- 타이틀바에 두가지 종류를 동시에 표시할 수 없다.tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

7. Notificationtompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 화면위 상태바에 나타나고 상태바 리스트에 생기는 것tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- Notification 객체 생성 ( 상태표시줄에 표시할 아이콘, 상태표시줄에 표시할 텍스트, 표시할 시각 )

- notification을 표시하기 위해 setLatestEventInfo() 메소드 사용 (컴포넌트의 컨텍스트 객체, list에 표시될 제목, list에 표시될 내용, 항목을 눌렀을 때 수행할 작업), pendingintent 사용tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 위에 까지가 표시할 준비tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 생성된 Notification 객체를 NotificationManager에게 넘겨 Notification을 표시해 주도록 한다

- NotificationManger nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE)

- nm.notify(NOTIFICATION_ID, notification);tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

8. Themetompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 일괄적으로 테마 바꾸기tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- res/values 폴더에 theme.xml 파일과 style.xml 파일을 생성

- 버튼의 테마 바꾸기tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

style.xml 파일에 <resources>

<style name="Button" parent="@android:style/Widget.Button">

<item name="android:background">#FF0000</item>tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

<item name="android:textColor">#FFFFOO</item>tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

</style>tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

</resource>tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 그다음 만든 버튼 스타일을 기존 버튼 테마에 지정한다, theme.xml파일에

<resources>tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

<style name="myTheme" parent="android:Theme"> 기존의 테마를 상속하여 정의한 테마로 바뀌도록 함

<item name="android:buttonStyle">@style/Button</item>tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

</style>tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

</resources>tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

-매니페스트 파일을 열어 어플리케이션 탭에서 theme 항목에서 myTheme을 선택한다.

9. 어댑터 뷰tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 어댑터 뷰는 항목에 해당하는 여러 개의 차일드 뷰를 가질 수 있고 사용자와 상호 작용도 처리한다.

- ArrayAdapter 클래스는 객체 배열이나 리소스에 정의된 배열로부터 데이터를 가져오며, CursorAdapter는 데이터베이스로부터 데이터를 공급받는다. SimpleAdapter는 XML 파일의 정적인 데이터를 원본으로 사용한다.

9-1. 리스트뷰(p.489)tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- <ListView ~ />로 사용tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

1. 데이터 원본 준비tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

ArrayList<String> arGeneral = new ArrayList<String>();

arGeneral.add("a");tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

arGeneral.add("b");

2. 어댑터 준비tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

ArrayAdapter<String> Adapter = new ArrayAdapter<String>(this, R.layout.simple_list_item_1, arGeneral);

3. 어댑터 연결tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

ListView list = (ListView)findViewById(R.id.list);

list.setAdapter(Adapter);tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 고정된 값일때는 데이터 원본을 리소스에 정의해놓고 사용하는게 좋다

ArrayAdapter<CharSequence> Adapter = ArrayAdapter.createFromResource(this, R.array.country, android.R.layout.simple_list_item_1);

- 스크롤 관련 처리를 자체적으로 지원한다.tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 항목 선택모드 관련해서는 사용자가 누를 수 있는 체크박스나 라디오 버튼이 배치되어 있어야 선택이 허용된다.

9-2. 스피너tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 클릭할 때만 팝업으로 펼쳐진다. 흔히 콤보박스라고 부르는 컨트롤이 스피너 위젯이다.

- 스피너는 대체로 여러 가지 선택사항 중 하나를 선택 받을 때만 사용된다.

- 스피너도 어댑터로부터 데이터를 공급받으며 어댑터를 만드는 방법은 리스트 뷰와 동일하다.

- simple_spniner_item, simple_spinner_dropdown_itemtompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 처음에는 전자로 설정하고, 펼쳤을때 UI는 setDropDownViewResource(simple_spinner_dropdown_item);으로 바꿀수 있다.

10. Dialogtompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

* AlertDialog : 사용자에게 간단한 알림과 선택을 유도하는 다이얼로그

- AlertDialog 자체는 생성자가 protected로 숨겨져 있어 직접적으로 생성할 수 없으며 내부 클래스인 Builder를 통해 생성해야 한다.

- 빌더는 일단 생성해 놓고 필요한 메서드를 순서에 상관없이 여러번 호출할 수 있어 편리하다.

- 빌더에 의해 생성된 대화상자는 아직 메모리에 있기만 할 뿐이지 화면에 나타나지는 않으며 show() 메서드를 호출해야 비로소 사용자 눈에 보인다.

- AlertDialog.Builder bld = new AlertDialog.Builder(부모액티비티.ths); p.694 참조

- 대화상자 미리 생성을 이용해서 반응속도 높이기 p.697tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- onPrepareDialog 메소드는 대화상자가 화면에 나타나기 전에 호출되는데 여기서 프로그램의 상태에 따라 대화상자를 갱신한다. onCreateDialog와는 달리 이미 생성된 대화상자에 대해서도 호출되므로 상황에 따라 대화상자의 속성이나 위젯 속성을 변경하기에 적합하다.

- showDialog, dismissDialog(숨김), removeDialog(파괴)tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

* DatePickerDialog : 날짜를 선택할 수 있는 다이얼로그이다.

- OnDateSetListener는 datepickerdialog에서 set을 누르면 설정한 숫자를 읽는다.

* TimePickerDialog : 시간을 선택할 수 있는 다이얼로그이다.

11. 리소스tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- 리소스를 외부화 하면 리소스의 유지,업데이트,관리가 쉬워지고, 국제화를 지원하기위해 수정을 쉽게 할 수 있다. res폴더 밑에 저장된다.

- 리소스 타입에는 간단한 값(value), drawable, 레이아웃, 애니메이션, xml스타일이 있다.

- 코드에서는 static 클래스 R을 사용해 리소스에 접근한다.tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

12. COLOR,RGBtompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- #을 제외한 문자열이 6자리인 경우 순수 RGB가 적용, #을 제외한 문자열이 8자리인 경우 앞 2자리는 투명도를 지정하는 alpha값

13. Drawabletompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- drawable은 재사용을 목적으로 저장하는 이미지의 형태tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- NinePatchDrawable : 버튼처럼 상하좌우, 확대,축소가 가능한 이미지로서 PNG 타입으로 할 때

- StateListDrawable : 여러 상태에 따라 다른 이미지를 적용하고자 할 때

- AnimationDrawable : 트윈 및 프레임 애니메이션에 사용하고자 할 때

- BitmapDrawable : .png,.jpg등 비트맵 이미지 파일에 사용한다.tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

14. 크기 단위tompa 모바일 프로그래밍 능력 시험 안드로이드 marcof

- px : 실제 스크린상의 픽셀에 대응 in : 실제 스크린에 기반한 크기 mm : 실제 스크린에 기반한 크기

pt : 인치의 1/72 사이즈로 실제 스크린에 기반한 크기 dp : 밀도에 독립적인 픽셀 sp : 스케일 독립 픽셀 (사용자 글꼴 크기 설정에 따라서 확대,축소된다.)