8 차시메뉴와대화상자 1 학습목표 안드로이드에서메뉴를작성하고사용하는방법을배운다. 안드로이드에서대화상자를만들고사용하는방법을배운다. 2 확인해볼까? 3 메뉴 1) 학습하기
[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item android:id="@+id/ 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu. 메뉴XML아이디, menu); return true; } public boolean onoptionsitemselected(menuitem item) { switch(item.getitemid()){ case R.id. 메뉴항목ID; return true; } - 2 -
} return false; 2) 활동하기 활동개요 활동과정 - 3 -
[ 그림 8-2] 메뉴폴더생성 [ 그림 8-3] 메뉴 xml 파일생성 - 4 -
[ 예제 8-1]main.xml ( 메뉴폴더 ) 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 2 3 <item 4 android:id="@+id/itemred" 5 android:title=" 빨강 "/> 6 <item 7 android:id="@+id/itemgreen" 8 android:title=" 초록 "/> 9 <item 10 android:id="@+id/itemblue" 11 android:title=" 파랑 "/> 12 13 </menu> 1, 13행메뉴의시작과끝을나타낸다. 3행아이템의시작을나타낸다. 6행의 /> 으로아이템의끝을표시한다. 4행아이템의아이디를설정한다. 5행아이템의제목을설정한다. [ 예제 8-2]main.xml ( 레이아웃폴더 ) 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:gravity="center" 6 tools:context=".menuactivity" > 7 8 <TextView 9 android:id="@+id/tvmenu" - 5 -
10 11 12 13 14 15 android:layout_width="wrap_content" android:text=" 메뉴테스트 " android:textsize="30dp" /> </LinearLayout> [ 예제 8-3]MenuActivity.java 1 package com.example.menu; 2 3 import android.app.activity; 4 import android.graphics.color; 5 import android.os.bundle; 6 import android.view.menu; 7 import android.view.menuitem; 8 import android.widget.textview; 9 10 public class MenuActivity extends Activity { 11 12 TextView tvmenu; 13 14 @Override 15 protected void oncreate(bundle savedinstancestate) { 16 super.oncreate(savedinstancestate); 17 setcontentview(r.layout.main); 18 settitle(" 간단메뉴 "); 19 20 tvmenu = (TextView) findviewbyid(r.id.tvmenu); 21 } - 6 -
22 23 @Override 24 public boolean oncreateoptionsmenu(menu menu) { 25 // Inflate the menu; this adds items to the action bar if it is present. 26 getmenuinflater().inflate(r.menu.main, menu); 27 return true; 28 } 29 30 @Override 31 public boolean onoptionsitemselected(menuitem item) { 32 // TODO Auto-generated method stub 33 switch (item.getitemid()) { 34 case R.id.itemRed: 35 tvmenu.settextcolor(color.red); 36 return true; 37 case R.id.itemGreen: 38 tvmenu.settextcolor(color.green); 39 return true; 40 case R.id.itemBlue: 41 tvmenu.settextcolor(color.blue); 42 return true; 43 } 44 return false; 45 } 46 } 12, 20행텍스트뷰변수를선언하고위젯과연결한다. 24~28행메뉴가클릭되었을때의동작을구현한다. 안드로이드 SDK 4.0.3부터는생성시구현되어있다. 31행 ~45행 onoptionsitemselected() 메소드를오버라이드하여구현한다. 액티비티안에서마우스오른쪽버튼을클릭하여 [Source]- [Override/Implement Methods...] 를선택한다. 대화상자에서 onoptionsitemselected() 메소드를선택한후 <OK> 버튼을눌러메소드를추가한후코딩한다. 33행선택된메뉴항목에대한아이디에따라수행해야할내용을 switch 문으로분기한다. - 7 -
[ 그림 8-4] 간단메뉴실행화면 4 대화상자 1) 학습하기 - 8 -
[ 그림 8-5] 대화상자사용순서 2) 활동하기 활동개요 활동과정 - 9 -
[ 예제 8-4]main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:gravity="center_horizontal" 6 android:orientation="vertical" 7 tools:context=".dialogactivity" > 8 <Button 9 android:id="@+id/btninput" 10 android:layout_width="wrap_content" 11 12 android:text=" 사용자정보입력하기 " /> 13 <TextView 14 android:id="@+id/tvname" 15 android:layout_width="wrap_content" 16 17 android:text=" 사용자이름 : " 18 android:textsize="20dp" /> 19 <TextView 20 android:id="@+id/tvage" 21 android:layout_width="wrap_content" 22 23 android:text=" 나이 : " 24 android:textsize="20dp" /> 25 <TextView 26 android:id="@+id/tvemail" - 10 -
27 28 29 30 31 android:layout_width="wrap_content" android:text=" 이메일 : " android:textsize="20dp" /> </LinearLayout> [ 그림 8-6] dialog xml 파일생성 [ 예제 8-5]dialog.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" 6 android:padding="10dp" > - 11 -
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 <TextView android:layout_width="match_parent" android:text=" 사용자이름 " /> <EditText android:id="@+id/dlgedtname" android:layout_width="match_parent" android:hint=" 이름을입력하세요." /> <TextView android:layout_width="match_parent" android:text=" 나이 " /> <EditText android:id="@+id/dlgedtage" android:layout_width="match_parent" android:hint=" 나이를입력하세요." /> <TextView android:layout_width="match_parent" android:text=" 이메일 " /> <EditText android:id="@+id/dlgedtemail" android:layout_width="match_parent" android:hint=" 이메일을입력하세요." /> </LinearLayout> [ 예제 8-6]DialogActivity.java 1 package com.example.dialog; 2 3 import android.app.activity; 4 import android.app.alertdialog; 5 import android.content.dialoginterface; - 12 -
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 42 43 44 45 import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; public class DialogActivity extends Activity { TextView tvname, tvage, tvemail; Button btninput; EditText dlgedtname, dlgedtage, dlgedtemail; View dialogview; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); settitle(" 사용자정보입력 "); tvname = (TextView) findviewbyid(r.id.tvname); tvage = (TextView) findviewbyid(r.id.tvage); tvemail = (TextView) findviewbyid(r.id.tvemail); btninput = (Button) findviewbyid(r.id.btninput); btninput.setonclicklistener(new View.OnClickListener() { @Override public void onclick(view arg0) { dialogview = (View) View.inflate(DialogActivity.this, R.layout.dialog, null); AlertDialog.Builder dlg = new AlertDialog.Builder(DialogActivity.this); dlg.settitle(" 사용자정보입력 "); dlg.seticon(r.drawable.ic_launcher); dlg.setview(dialogview); dlg.setpositivebutton(" 확인 ", new DialogInterface.OnClickListener() { @Override public void onclick(dialoginterface dialog, int which) { dlgedtname = (EditText) dialogview.findviewbyid(r.id.dlgedtname); dlgedtage = (EditText) dialogview.findviewbyid(r.id.dlgedtage); dlgedtemail = (EditText) dialogview.findviewbyid(r.id.dlgedtemail); - 13 -
46 tvname.settext(" 이름 : " + dlgedtname.gettext().tostring()); 47 tvage.settext(" 나이 : " + dlgedtage.gettext().tostring()); 48 tvemail.settext(" 이메일 " + dlgedtemail.gettext().tostring()); 49 } 50 51 52 }); dlg.setnegativebutton(" 취소 ", null); dlg.show(); 53 } 54 }); 55 } 56 } 34~38행 dialog.xml 파일을인플레이트해서 dialogview에대입한후 38행에서 setview() 로 인플레이트한뷰를대화상자로사용했다. 39~50행 < 확인 > 버튼에대한동작코드이다. < 확인 > 버튼을누르면대화상자의에디트텍스트 에있는내용이액티비티의텍스트뷰로들어가게된다. 5 배운내용정리 [ 그림 8-7] 실행화면 - 14 -
6 학습확인하기 - 15 -
6 지식창고 참고문헌 참고사이트 - 16 -