PROGRAMMING WORKSHOP

Android|
옵션 메뉴|Option Menu

어느 프로그램이나 메뉴시스템이 있다
안드로이드에도 여러가지 메뉴가 있고 그중의 하나가 옵션메뉴이다
옵션메뉴는 아래의 그림과 같다


옵션메뉴를 만들고
옵션메뉴를 크릭할때 마다 화면의 그림이 바뀌도록 하자
그림이 바뀌는 것은 그림을 담을 콘트롤(ImageView)을 하나 만들어서 처리하자
그러기 위하여 그림 화일을 준비하여야 할 것이다
그림화일은 아래의 같이



프로젝트익스프로어상의 Res/drawable-hdpi 폴더에 직접불여넣기를 해도 좋겠지만
화일명등을 수정하려면 화일탐색기상의 해당결로의 폴더에 사진을 붙여넣고
화일명등을 적절히 수정하는 것이 좋다
탐색기 상의 갱신된 내용이 프로젝트창에 반영되게 하려면
Project/Clean 메뉴를 크릭하여 실행하면 갱신된다

옵션메뉴를 생성하는 것은 최초 Activity.java화일에
아래와 같은 기본적을 자동생성된 2개의 메소드가 있었다
onCreate()는 Acitivity 화면전체를 초기화하는 메소드이고
두번째의 onCreateOptionMenu()..즉 옵션메뉴가 기본적으로 하나가
만들어진다
이것을 지워버리면 Option Menu를 사옹하지 않는 다는 것이지..별 큰문제는 없는 것이다
그러나 여기에서는 이것을 활용하여 메뉴를 만들어 보자는 이야기!!

public class MainActivity extends Activity {
	//아래는 메인화면을 생성하는 메소드
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
	//아래는 옵션메뉴를 res/menu/activity_main.xml 이라는 메뉴구성생화일을 
	사용하여 만드는 메소드
    @Override
	
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    
}

옵션메뉴를 생성하는 것도 위와 같이 xml화일을 사용하지 않고
아래와 같이 메뉴개체를 프로그래밍적으로 생성하여 붙일수도 있을 것이다

public boolean onCreateOptionsMenu(Menu menu){
     menu.add(0,menu_news,0,"News");
     menu.add(0,menu_search,0,"Search");
     menu.add(0,menu_exit,0,"Exit");
     return true
}

여기에서는 xml화일을 활용해 보자

아래와 같이 기본적으로 프로젝트를 새로만들면
res/menu/activity_main.xml화일이 자동생성되기도 하지만..
이것은 그냥 폴더도 만들고 화일도 만들면서 스스로 할수도 있는 것
아래와 같이 메뉴를 구성해 보자

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_calculator" android:title="Calculator" /> <item android:id="@+id/menu_news" android:title="News" /> <item android:id="@+id/menu_search" android:title="Search" /> <item android:id="@+id/menu_location" android:title="Location" /> <item android:id="@+id/menu_alarm" android:title="Alarm" /> <item android:id="@+id/menu_google_play" android:title="GooglePlay" /> </menu>

아래의 그림과 같이 xml화일을 Activity개체가 생성될때
onCreateOptionsMenu()메소드에서 옵션메뉴 개체를 만들어 띄우게 되는 것



이제 메뉴를 크릭하면 실행이 되는 지능을 심어주는 것이 필요할 것이다
옵션메뉴의 아이템을 선택할때 무언가 실행되게 하는 메소드가 필요한 것이다
아래의 그림과 같이



나타난 대화상자에서 Activity 폴더를 열면 줄줄이 메소드명들이 들어있다
목록에서 아래의 그림과 같이 선택확인하면..
아래와 같이 ..



메소드를 직접 작성하여도 되지만 위와 같이 메소드를 목록에서
찾아서 작성하게 하는 것이 좋을 것이다..시간절약, 스펠실수 없고..
이제 위의 메소드 내부에 코딩을 아래와 같이 한다

 public boolean onOptionsItemSelected(MenuItem item) 
   { 
	   ImageView imageView =(ImageView) findViewById(R.id.imageView1);
	   
	   switch (item.getItemId()) 
       { 
       case R.id.menu_alarm: 
    	   imageView.setImageResource(R.drawable.alarm);
    	   
           Toast.makeText(MainActivity.this, "Alarm 메뉴가 선택되었습니다", Toast.LENGTH_SHORT).show(); 
           return true; 
 
       case R.id.menu_calculator: 
    	   imageView.setImageResource(R.drawable.calculator);
           Toast.makeText(MainActivity.this, "Calculator 메뉴가 선택되었습니다", Toast.LENGTH_SHORT).show(); 
           return true; 
 
       case R.id.menu_google_play: 
    	   imageView.setImageResource(R.drawable.googleplay);
           Toast.makeText(MainActivity.this, "Google_Play 메뉴가 선택되었습니다", Toast.LENGTH_SHORT).show(); 
           return true; 
 
       case R.id.menu_location: 
    	   imageView.setImageResource(R.drawable.location);
           Toast.makeText(MainActivity.this,"Locatioon 메뉴가 선택되었습니다", Toast.LENGTH_SHORT).show(); 
           return true; 
 
       case R.id.menu_news: 
    	   imageView.setImageResource(R.drawable.news);
           Toast.makeText(MainActivity.this, "News 메뉴가 선택되었습니다", Toast.LENGTH_SHORT).show(); 
           return true; 
 
       case R.id.menu_search: 
    	   imageView.setImageResource(R.drawable.search);
           Toast.makeText(MainActivity.this, "Search 메뉴가 선택되었습니다", Toast.LENGTH_SHORT).show(); 
           return true; 
 
       default: 
           return super.onOptionsItemSelected(item);
       }
	   
	   
   } 


Switch 구문의 문법은 이제 알수 있을 것이고..
중요한 것은 어떤 메뉴를 크릭하였는지를 알아내는 것..

 public boolean onOptionsItemSelected(MenuItem item) 
   { 
	   ImageView imageView =(ImageView) findViewById(R.id.imageView1);
	   
	   switch (item.getItemId()) 
       { 
		case R.id.menu_alarm:
		  ....
		case R.id.menu_calculator: 
		  ....
		}
}

우선 그림화일을 담을 개체인 ImageView를 찾아서 변수에 담아둔후 매개변수로 전달받은 메뉴아이템에서
item.getItemId() 로 메뉴아이템의 ID값을 얻어내는 것이고
ID값을 각각 Layout xml 화일에서 지정하였던 ID값과 비교하면 어떤 메뉴를
크릭한것인지 가름하게 될 것이고
? 이럴 경우에는 이그림을 ImageView에 심어준다..
이때 imageView개체의 메소드 setImageResource로 해당그림을 보관하여두었던
경로..R.drawable.location 이때 location.jpg의 jpg확장자는 붙여주지 않아도 된다
drawable은 drawable-hdpi, drawable-mdpi....등의 폴더를 모두 찾아서
적절한 해상도의 것을 알아서 찾아서 올린다

imageView.setImageResource(R.drawable.location)



***[LOG-IN]***