9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요
[ 그림 9-1] 시간예약앱 활동과정 - 2 -
[ 그림 9-2] 안드로이드 SDK Manager [ 예제 9-1]main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - 3 -
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 xmlns:tools="http://schemas.android.com/tools" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" android:padding="5dp" tools:context=".dateactivity" > <LinearLayout android:gravity="center" > <TextView android:layout_width="wrap_content" android:text="-현재시간 : " /> <DigitalClock android:layout_width="wrap_content" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_margin="5dp" android:text="-날짜선택 " /> <DatePicker android:id="@+id/datepicker" android:layout_height="120dp" android:layout_margin="5dp" /> <TextView android:layout_width="wrap_content" android:layout_margin="5dp" android:text="-시간선택 " /> <TimePicker android:id="@+id/timepicker" android:layout_height="120dp" android:layout_margin="5dp" /> <Button - 4 -
42 43 44 45 46 47 48 49 50 51 52 53 54 android:id="@+id/btn" android:text=" 예약하기 " /> <TextView android:id="@+id/tvtext" android:background="#cccccc" android:text=" 예약시간 : " android:textcolor="#ff0000" android:textsize="20dp" /> </LinearLayout> [ 예제 9-2]DateActivity.xml 1 package com.example.date; 2 3 import android.app.activity; 4 import android.os.bundle; 5 import android.view.view; 6 import android.widget.button; 7 import android.widget.datepicker; 8 import android.widget.textview; 9 import android.widget.timepicker; 10 11 public class DateActivity extends Activity { 12 13 Button btn; 14 DatePicker datepicker; 15 TimePicker timepicker; 16 TextView tvtext; 17 18 String year, month, day, hour, minute; 19-5 -
20 @Override 21 protected void oncreate(bundle savedinstancestate) { 22 super.oncreate(savedinstancestate); 23 setcontentview(r.layout.main); 24 settitle(" 시간예약 "); 25 26 btn = (Button) findviewbyid(r.id.btn); 27 datepicker = (DatePicker) findviewbyid(r.id.datepicker); 28 timepicker = (TimePicker) findviewbyid(r.id.timepicker); 29 tvtext = (TextView) findviewbyid(r.id.tvtext); 30 31 btn.setonclicklistener(new View.OnClickListener() { 32 33 @Override 34 public void onclick(view v) { 35 // TODO Auto-generated method stub 36 year = Integer.toString(datePicker.getYear()); 37 month = Integer.toString(datePicker.getMonth()); 38 day = Integer.toString(datePicker.getDayOfMonth()); 39 40 hour = Integer.toString(timePicker.getCurrentHour()); 41 minute = Integer.toString(timePicker.getCurrentMinute()); 42 43 tvtext.settext(" 예약시간 : " + year + " 년 " + month + " 월 " + day + " 일 " + 44 hour + " 시 " + minute + " 분 "); 45 } 46 }); 47 } 48 } 36~38행 DatePicker의선택된곳의년, 월, 일을가져오는메소드를호출하여문자열변수에넣는다. 40~41행 TimePicker의선택된곳의시, 분을가져오는메소드를호출하여문자열변수에넣는다. 43행텍스트뷰에예약된시간을출력한다. - 6 -
4 웹뷰 1) 활동하기 활동개요 활동과정 - 7 -
[ 그림 9-3] 간단웹브라우저 [ 예제 9-3]main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 tools:context=".webviewactivity" > 7 8 <LinearLayout 9 android:id="@+id/linearlayout" 10 11 12 android:orientation="horizontal" > 13 14 <EditText 15 android:id="@+id/edturl" - 8 -
16 android:layout_width="0dp" 17 18 android:layout_weight="1" 19 android:hint=" 웹주소를입력하세요." 20 android:singleline="true" > 21 </EditText> 22 23 <Button 24 android:id="@+id/btngo" 25 android:layout_width="wrap_content" 26 27 android:text=" 이동 " /> 28 29 <Button 30 android:id="@+id/btnback" 31 android:layout_width="wrap_content" 32 33 android:text=" 이전 " /> 34 </LinearLayout> 35 36 <WebView 37 android:id="@+id/webview" 38 39 android:layout_height="0dp" 40 android:layout_weight="1" 41 android:clickable="true" /> 42 43 </LinearLayout> 19행에디트텍스트에힌트를설정하였다. 힌트는텍스트입력을시작하는순간사라진다. 20행에디트텍스트에 SingLine 속성을 true로설정하였다. true로설정하면텍스트입력이줄바깥으로나가도줄변경이되지않는다. 39, 40행내부리니어레이아웃이사용하고남은공간모두를 WebView가사용한다. [ 예제 9-4]WebViewActivity.java 1 package com.example.webview; - 9 -
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import android.app.activity; import android.os.bundle; import android.view.view; import android.webkit.websettings; import android.webkit.webview; import android.webkit.webviewclient; import android.widget.button; import android.widget.edittext; public class WebViewActivity extends Activity { EditText edturl; Button btngo, btnback; WebView web; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); settitle(" 간단웹브라우저 "); edturl = (EditText) findviewbyid(r.id.edturl); btngo = (Button) findviewbyid(r.id.btngo); btnback = (Button) findviewbyid(r.id.btnback); web = (WebView) findviewbyid(r.id.webview); web.setwebviewclient(new KaistWebViewClient()); WebSettings webset = web.getsettings(); webset.setbuiltinzoomcontrols(true); btngo.setonclicklistener(new View.OnClickListener() { public void onclick(view v) { web.loadurl(edturl.gettext().tostring()); } }); btnback.setonclicklistener(new View.OnClickListener() { public void onclick(view v) { - 10 -
42 web.goback(); 43 } 44 }); 45 } 46 47 class KaistWebViewClient extends WebViewClient { 48 @Override 49 public boolean shouldoverrideurlloading(webview view, String url) { 50 // TODO Auto-generated method stub 51 return super.shouldoverrideurlloading(view, url); 52 } 53 } 54 } 29행 KaistWebViewClient 클래스를생성하여웹뷰에대입한다. 31~32행웹세팅클래스를이용하여 ZoomIn 컨트롤을화면에보이도록한다. 36행에디트텍스트에입력한웹주소의웹페이지가웹뷰에나오도록한다. 42행웹뷰의이전화면으로돌아간다. 47~53행 WebViewClient 클래스를상속받은 KaistWebViewClient 클래스를구현하였다. 49~52행 KaistWebViewClient 클래스의생성자이다. KaistWebViewClient 클래스내부에서마우스오른쪽버튼을클릭하여 [Source]-[Override/Implements Methods] 를선택한다. [Override/Implement Mothods] 창이나오면 shouldoverrideurlloading() 메소드를선택하고 <OK> 버튼을클릭하면자동으로생성된다. - 11 -
[ 그림 9-4] 웹페이지연결실패 [ 그림 9-5] 메니페스트퍼미션설정 1-12 -
[ 그림 9-6] 메니페스트퍼미션설정 2 [ 그림 9-7] 메니페스트퍼미션설정 3-13 -
5 배운내용정리 6 학습확인하기 7 지식창고 참고문헌 참고사이트 - 14 -