헬로, 안드로이드 4 주차 사용자인터페이스디자인하기 (2) 강대기동서대학교컴퓨터정보공학부
학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.
차례 메뉴추가하기 Settings 추가하기 새게임시작하기 로그메시지로디버깅하기 디버거로디버깅하기 게임끝내기 요약 퀴즈 연습문제
메뉴추가하기 안드로이드가지원하는두가지메뉴 메뉴버튼을눌렀을때나오는메뉴 화면을손가락으로누를때나오는상황적 (contextual) 메뉴 메뉴버튼을눌렀을때나오는메뉴를만들려면 1. 사용할문자열정의 2. XML 을사용하여메뉴정의 3. import 추가 4. 메서드오버라이드
사용할문자열정의 /res/values/strings.xml <string name="settings_label">settings...</string> <string name="settings_title">sudoku settings</string> <string name="settings_shortcut">s</string> <string name="music_title">music</string> <string name="music_summary">play background music</string> <string name="hints_title">hints</string> <string name="hints_summary">show hints during play</string>
XML 을사용하여메뉴정의 /res/menu/menu.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/a pk/res/android"> <item android:id="@+id/settings" android:title="@string/settings_label" android:alphabeticshortcut="@string/settings_ shortcut" /> </menu>
import 추가 Sudoku.java import android.view.menu; import android.view.menuinflater; import android.view.menuitem;
메서드오버라이드 (oncreateoptionsmenu in Sudoku.java) @Override public boolean oncreateoptionsmenu(menu menu) { super.oncreateoptionsmenu(menu); MenuInflater inflater = getmenuinflater(); inflater.inflate(r.menu.menu, menu); return true; }
메서드오버라이드 (onoptionsitemselected in Sudoku.java) @Override public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case R.id.settings: startactivity(new Intent(this, Prefs.class)); return true; // More items go here (if any)... } return false; }
Settings 추가하기 기본설정정의 예 : res/xml/settings.xml Prefs 클래스정의하여 PreferenceActivity 확장 /src/org/example/sudoku/prefs.java Prefs 액티비티를 AndroidManifest.xml에등록 <activity android:name=".prefs" android:label="@string/settings_title"> </activity>
res/xml/settings.xml <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key="music" android:title="@string/music_title" android:summary="@string/music_summary" android:defaultvalue="true" /> <CheckBoxPreference android:key="hints" android:title="@string/hints_title" android:summary="@string/hints_summary" android:defaultvalue="true" /> </PreferenceScreen>
/src/org/example/sudoku/prefs.java package org.example.sudoku; import android.os.bundle; import android.preference.preferenceactivity; public class Prefs extends PreferenceActivity { @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); addpreferencesfromresource(r.xml.settings); } }
새게임시작하기 문자열추가 배열리소스만듦 import 추가 News Game 버튼클릭처리 난이도목록사용자인터페이스만듦
/res/values/strings.xml <string name="new_game_title">difficulty</string> <string name="easy_label">easy</string> <string name="medium_label">medium</string> <string name="hard_label">hard</string>
/res/values/arrays.xml <resources> <array name="difficulty"> <item>@string/easy_label</item> <item>@string/medium_label</item> <item>@string/hard_label</item> </array> </resources>
/src/org/example/sudoku/sudoku.java import 추가 import android.app.alertdialog; import android.content.dialoginterface; import android.util.log;
/src/org/example/sudoku/sudoku.java News Game 버튼클릭처리 public void onclick(view v) { switch (v.getid()) { case R.id.continue_button: startgame(game.difficulty_continue); break; //... } } case R.id.about_button: Intent i = new Intent(this, About.class); startactivity(i); break; // More buttons go here (if any)... case R.id.new_button: opennewgamedialog(); break; case R.id.exit_button: finish(); break;
/src/org/example/sudoku/sudoku.java 난이도목록사용자인터페이스만듦 /** Ask the user what difficulty level they want */ private void opennewgamedialog() { new AlertDialog.Builder(this).setTitle(R.string.new_game_title).setItems(R.array.difficulty, new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialoginterface, int i) { startgame(i); } }).show(); } /** Start a new game with the given difficulty level */ private void startgame(int i) { Log.d(TAG, "clicked on " + i); Intent intent = new Intent(Sudoku.this, Game.class); intent.putextra(game.key_difficulty, i); startactivity(intent); }
로그메시지로디버깅하기 Log.e() 오류 (error) Log.w() 경고 (warning) Log.i() 정보 (information) Log.d() 디버깅 (debugging) Log.v() 세부정보 (verbose) Window > Show View > Other > Android > LogCat
디버거로디버깅하기 프로젝트디버깅활성화 AndroidManifest.xml 에서 android:debuggable="true" <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> Right click > Debug As > Android Application
게임끝내기 대부분의스마트폰응용프로그램에서끝내기버튼은필요치않음 안드로이드의경우, 이전버튼이나홈키를누르면됨 Activity 를종료하는방법 public void onclick(view v) { switch (v.getid()) { case R.id.exit_button: finish(); break; } }
요약 메뉴를추가하는방법을설명하였다. 프로그램의기본설정 (settings) 을정의하는방법을설명하였다. 대화상자를여는방법을설명하였다. 로그메시지로디버깅하는방법을소개하였다. 디버거로디버깅하는방법을소개하였다.
퀴즈 안드로이드가지원하는두가지메뉴는무엇인가? 기본설정을정의하기위해서는무슨클래스를확장해야하는가? New Game 버튼을클릭하면나오는대화상자는어떤클래스인가? 로그메시지로디버깅하는종류는몇가지가있고무엇무엇인가? 프로젝트의디버깅을활성화하려면어떻게해야하는가? 액티비티를종료하려면어떻게하면되는가?
연습문제 메뉴버튼을눌렀을때나오는메뉴에자신의이름이나오도록바꾸어보라. 기본설정에체크박스를 3 개더정의해보라. HelloMenu 라는안드로이드프로그램프로젝트를만들어서메뉴버튼눌렀을때나오는메뉴아이템을 " 설정 " 이라고하고, " 설정 " 이라는아이템을누르면 " 음악 " 과 " 힌트 " 에대한설정화면 ( 액티비티 ) 를실행하는프로그램을만들어보자. opennewgamedialog 을보면한줄로구성되어있다. 이를세줄이상으로나누어보라. opennewgamedialog 메서드의 DialogInterface.OnClickListener 를매개변수가아닌외부클래스로정의해보라.