이번 시간에는 Listview, TabView등 UI를 보이는데 중요한 위젯을 배웠어요. 그럼 List부터 시작할께요. 

 일단 List에 보여줄 객체를 생성해야 해요.







그런데 List의 각 아이템에있는 view에대한 id들을 매번 가져오면 메모리 활용면에 있어서 별로 좋지 않겠죠?
 그래서 view를 재활용하는 방법을 많이 써요. convertView를 이용하는 거죠





TextView를 하나 더 추가한 연습문제에요.
 각각의 아이템을 원하는 layout으로 바꿔줄수도 있는데요 이럴때는 Customized List를 사용해요. getView() 메소드는 새로운 View를
만들기도 하고 단지 데이터만 연결시켜 주기도 하는데요 새로운 View를 이 안에서 만들어서 각자 아이템의 특징을 틀리게 해 줄수가
있죠. 
 이렇게 xml파일은 두개가 필요한데요 하나는 전체 Activity에 사용하는 거고, 하나는 하나의 item에만 적용하는 거죠.
 
 레이아웃 Inflator라는 애도 있는데요 얘는 XML 레이아웃의 내용을 실제 뷰 객체들의 트리로 변환을 하죠. 얘는 Adapter에서
item에 대한 정보를 갖고있는 xml파일을 인스턴스 객체로 만들어서 사용하기 위해 쓰여요.





 각 List의 아이템을 클릭했을 때 할 일을 지정할 수도 있어요
 그냥 한번 클릭했을 때와 오래 클릭했을 때로 나누어 지죠.
 보통 오래클릭했을 때는 설정에 관한걸 많이 보여줘요







 GridView라는 것도 있는데요 이건 표 형식으로 아이템을 보여주죠. 구성은 ListView를 사용하는 것과 동일해요. 하지만 한줄에
여러개가 들어가기 때문에 Colums를 넣어야 하죠. 속성중에 android:numColumns가 있는데 이 속성값을 auto_fit으로 하면
안드로이드는 여유공간이 얼마나 있는지와 나머지 속성들의 값을 참조해서 자동으로 결정해요. spacing 속성을 이요해서는 여백을
줄수 있죠. 여기서는 spinnerview에 맞게 시스템에서 미리 정해놓은 layout을 추천할께요. 바로 simple_spinner_item이에요.
 이렇게 안드로이드 시스템의 내장 레이아웃을 사용할 때도 많은데요 얘네는 보통 android.R 이렇게 시작되죠. 최소한 손가락이 누르기
좋은 크기로 알아서 만들어 줘요. 
 App 내에서 날짜 설정하는 경우도 많기 때문에 날짜/시간 선택기능 위젯도 있죠.
 



comboBox처럼 보여주는 위젯도 있어요. spinner가 그렇죠. list에서 layout을 두가지로 나눠보자고 하면
List에 표시되는 Layout과 다이얼로그에 표시되는 layout이 있어요. 다이얼로그로 표시되는 layout을 spinner라고 하죠.


AutoCompleteTextView라는 것도 있어요. 사용자의 입력을 받으면서 동시에 자동완성을 해 주는 거죠. 이것도 List에서 등용이 되서
쓰이는 거라 Adapter 등으로 처리해 줘요.
 Gallery라는 것도 있는데요 얘는 사진과 같은 것들을 볼수 있는 간편한 기능을 제공하는데요, View들이 수평으로 쭈욱 이동되는 거죠.
이것도 일종의 Adapter View라고 볼 수 있어요.

나중에 twitter와 관련된 프로젝트를 하기위해 twitter가입도 했어요



TabView를 볼께요.
 뷰의 탭부분을 설정하는 데에는 3가지가 필요한데요 TabHost는 모두 아우르는 것으로 메인 컨테이너라고 할 수 있죠.
 TabWidget은 탭 버튼을 담고있는 한 아이템을 구현현 것으로 아이콘과 텍스트로 구성되요. 그리고 FrameLayout에 탭 내용이
담기게 되죠. 
 여기서 주의할게 있는데요 TabHost는 평소 하던데로 +id만 하면 되지만 이건 App만 아는거기 때문에 시스템은 잘 몰라요.
 그래서 만약 TabWidget과 FrameLayout까지 이런식으로 해버리면 시스템이 알아서 접근을 할수가 없죠.
 그래서 시스템이 여기에는 알아서 접근할 수 있도록 개발자와의 약속을 해놓은 @android:id/tabs 와 @android:id/tabcontent 를
이용해야 해요.
 일반적으로 텝위젯을 사용할 때는 Activity를 먼저 구현한 후에 TabActivity에 추가해 주는 순서로 해요.

 손잡이 잡아당기는 위젯은 SlidingDrawer Widget이라고 하죠.









웹킷을 이용해 웹사이트를 보여주는 WebView를 볼께요.
 안드로이드에선 Activity에서 바로 html 내용을 보여줄 수 있어요. 완벽하게 지원을 해주죠. 그리고 웹킷엔진을 사용해요.
 웹킷 엔진은 웹브라우저, 웹뷰 웬만한건 다 되죠. 주의할 점은 인터넷 연결권한(INTERNET)이 있어야 한다는 거죠. 연결방식은 어떤 연결방식을 사용하더라도 상관없어요. WiFi, 무선통신망, Bluetooth 뭐든지 말이죠.








 사용자에게 URL주소를 입력받아서 이용할 수도 있어요



진짜 웹브라우저랑 비슷하게 만들기 위해 웹브라우저의 공개된 소스를 보도록 할께요
 기본 App에 있는걸 내가 처리하고 싶으면 이렇게 오픈소스를 다운받아서 하면되요.
 근데 여기서 문제점이 하나 발견되죠. onCreate() 메소드에 startActivity(ACTION_VIEW, "http://~~~") 이거를 해놓으면 웹에서
link를 클릭할 때마다 stack에 화면이 계속 쌓이게 되요. link된 화면으로 넘어가지 않죠. 그래서 Activity 하나가 startActivity 를 모두
처리하게 해야 하는데요 onNewIntent() 를 이용하면 되요. getIntent에서는 처음 StartActivity 만 처리하고 두번째 부터는
onNewIntent() 가 호출되기 때문이죠. 그런데 이 특징이 적용되게 할라면 manifest 파일에서 런치모드를 singleTask 로 해야해요.
 이렇게 되면 처음에 Activity는 버튼으로 웹킷을 사용하지만 그 다음 두,세번째 부터는 넘어온 URi로 웹킷을 사용하는 거죠.









intent filter부분을 참고해서 이용하면 되겠죠?



그렇게 되면 intent-filter가 두개기 때문에 어떤 application으로 처리할지 선택하는 다이얼로그가 나오죠



우리가 만든 인텐트를 받도록 설정해 볼께요





그런데 한번 웹킷을 사용했다가 다시 접속하려고 하면 페이지를 넘어가지 않아요. 새로운 인텐트를 처리하도록 하지 않았기 때문인데요, onCreate에서 가져온 인텐트로는 새로운걸 처리할 수 없죠. 그래서 onNewIntent라는 콜백메소드를 만들어야 해요.









신고

'T아카데미' 카테고리의 다른 글

데이터 저장 기초  (0) 2010.07.03
메뉴  (0) 2010.07.03
사용자인터페이스_02  (0) 2010.07.02
사용자인터페이스_02  (0) 2010.07.01
어플리케이션 구조  (0) 2010.07.01
사용자인터페이스_01  (0) 2010.07.01
Posted by 응큼미소


티스토리 툴바