사용자인터페이스 (II)
시작하면서 2 목차 리스트뷰 : 어댑터, 어댑터뷰, 대화창 메뉴
리스트뷰 - 어댑터
Adapter 4 배열, XML 파일, 데이터베이스에서다양한종류의값을읽어오는공통의인터페이스 선택위젯에게데이터를제공, 각데이터항목들을위젯내부에표시하는위젯클래스로의변홖수행 사용자인터페이스인뷰와데이터소스를연결 Data Source: Array, XML, Database 어댑터뷰 어댑터 데이터소스 ( 리스트뷰, 격자뷰등 ) ( 배열어댑터, 커서어댑터등 ) ( 배열, DB, XML 등 )
Adapter 5 Adapter 종류 ArrayAdapter: 배열 SimpleAdaper: XML CursorAdapter: 데이터베이스, 컨텎트제공자 ArrayAdapter 행레이아웃리소스표준 simple_list_item_1(android.r.layout.simple_list_item_1) 한개의텍스트뷰로구성 simple_list_item_2(android.r.layout.simple_list_item_2) 두개의텍스트뷰로구성 예 ) ArrayAdapter adapter1 = new ArrayAdapter(this, android.r.layout.simple_list_item_1, mstrings); 컨텍스트에액티비티자싞을나타내는 this를지정 표현할뷰의리소스 ID로 simple_list_item_1를지정 데이터소스로배열 mstrings 지정
AdapterView 와리스트뷰 6 어댑터는배열같은외부데이터와어댑터뷰사이에매개역할 어댑터뷰는어댑터가넘겨주는데이터를화면상의위젯에표시 레이아웃에데이터를채우는역할 사용자에의한항목선택이벤트처리역할 사용자는컨테이너에담긴뷰객체를표준적인방식에따라탐색 뷰그룹컨테이너 : [ 표 6-2] ListView, GridView, Gallery 등 AdapterView 파생컨테이너 같은종류의뷰를반복표시 ViewFlipper, ImageSwitcher, TextSwitcher 등전홖식컨테이너 뷰객체들을여러탭으로구조화하는 TabHost 대화창 리스트뷰 (ListView) 화면에표시할내용들이리스트형태로되어있는경우적합 ListActivity 클래스 : 리스트뷰를이용하는액티비티를생성 데이터들을리스트형태로쉽게만듬 참조클래스 : android.widget.listview
리스트뷰 7 < 실습 6-1> ListItemClickDemo 프로젝트생성 < 코드 6-2> 를 main.xml 복사 < 코드 6-3> 로 ListItemClickDemo.java 수정 [ 실행결과 ]
리스트뷰 8 < 실습 6-2> ListViewClickDemo 프로젝트생성 ListActivity 대싞에 Activity에서상속 < 코드 6-2> 를 main.xml 복사 < 코드 6-4> 로 ListViewClickDemo.java 수정 [ 실행결과 ]
리스트뷰 9 < 실습 6-3> 어댑터활용 (p.201) Data source: HashMap 으로이루어지는 ArrayList ArrayList: 리스트특성을갖는동적배열 HashMap: < 키, 값 > 의쌍으로구성 SimpleAdapter: 정적데이터를리소스파일에서정의한뷰로사상하는어댑터 ListView: 한줄에텍스트뷰 2 개가출력되는리스트 SimpleAdapterDemo 프로젝트생성 < 코드 6-5> 를 main.xml 복사 < 코드 6-7>~< 코드 6-8> 로 SimpleAdaperDemo.java 에복사 [ 실행결과 ]
대화창
대화창 11 사용자에게확실하게알리거나반응을받을필요가있을때사용 경고대화창 사용자의반응이있어야다음진행 윈도우의모달방식 최대 3개의버튺설정가능 setpositivebutton(), setneutralbutton(), setnegativebutton() 대표적인대화창 : < 표 6-2>
대화창 12 < 실습 6-4> 대화창생성 버튺클릭시경고대화창생성 경고대화창내 2개버튺클릭시경고대화창사라짐 SimpleAdapterDemo 프로젝트생성 < 코드 6-9> 를 main.xml 복사 < 코드 6-10>~< 코드 6-11> 로 AlertDialogDemo.java에복사 [ 실행결과 ]
날짜선택창
날짜선택창 14 달력을기준으로연 / 월 / 일을선택하는 DatePicker 를포함하는갂단한대화창 OnDateSetListener() 를설정 사용자가선택한날짜값을받음 날짜선택창에서연, 월, 일값을선택 ondateset() 메소드호출 이메소드를통해사용자가선택한연, 월, 일값을화면에표시
날짜선택창 15 < 실습 6-5> 대화창생성 DatePickerDemo 프로젝트생성 < 코드 6-12> 를 main.xml 복사 < 코드 6-13>~< 코드 6-18> 을 DatePickerDemo.java에복사 [ 실행결과 ]
메뉴
옵션메뉴 17 메뉴키클릭시화면하단에나타나는메뉴 아이콘메뉴 : 메뉴키를눌렀을때화면하단에처음나타나는아이콘메뉴항목 확장메뉴 (extended menu): 메뉴항목이 6 개초과시나머지항목들을표시하기위해사용 부메뉴 (submenu): 메뉴항목이또다른메뉴항목들로구성 옵션메뉴생성 oncreateoptionsmenu(menu menu) onoptionsitemselected(menuitem item)
옵션메뉴 18 < 실습 6-6> 옵션메뉴생성 메뉴항목 7 개생성 단축키생성 : setalpabeticshortcut( a ) 아이콘이미지추가 : seticon(r.drawable.icon) OptionMenuDemo 프로젝트생성 < 코드 6-19> 를 main.xml 복사 < 코드 6-20> 로 OptionMenuDemo.java에복사 [ 실행결과 ]
컨텍스트메뉴 19 화면의특정뷰를길게누를때 (long click) 나타나는메뉴 PC 에서오른쪽마우스클릭시나타나는메뉴에대응 컨텍스트메뉴생성 oncreatecontextmenu(contextmenu menu, View view, ContextMenuInfo menuinfo) oncontextitemselected(menuitem item) 특정뷰와컨텍스트메뉴를연결 setoncreatecontextmenulistener(this)
컨텍스트메뉴 20 < 실습 6-7> 컨텍스트메뉴생성 메뉴항목 7 개생성 ContextMenuDemo 프로젝트생성 < 코드 6-19> 를 main.xml 복사 < 코드 6-21> 로 ContextMenuDemo.java에복사 [ 실행결과 ]
메뉴인플레이션 21 메뉴구조를프로그램이아닌외부리소스파일에서정의 필요할때인플레이션시켜메뉴객체생성 리소스파일로메뉴구조를정의 : menutest.xml(< 코드 6-22>) <menu> <item> <menu> </menu> </item> </menu> MenuInflater 클래스 : 메뉴를정의하는리소스파일을이용하여메뉴객체를생성 OnCreateOptionsMenu(Menu menu) MenuInflater inflater = getmenuinflater(); inflater.inflate(r.menu.menutest, menu);
메뉴인플레이션 22 < 실습 6-8> 메뉴인플레이션 메뉴항목 7 개생성 항목 3 에뷰메뉴추가 MenuInflateDemo 프로젝트생성 < 코드 6-19> 를 main.xml 복사 < 코드 6-22> 를 res/menu 폴더의 menu.xml 에복사 < 코드 6-23> 을 MenuInflateDemo.java 에복사 [ 실행결과 ]