Notice
Recent Posts
Recent Comments
Link
관리 메뉴

설.현.아빠

[MENU] 구현해보기 본문

안드로이드/Menu

[MENU] 구현해보기

설.현.아빠 2011. 2. 11. 10:58


 

<?xml version="1.0" encoding="utf-8"?>

 

<!-- main.xml -->


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" >
 <TextView
  android:id="@+id/selection"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:background="#eeeeee"/>
 <ListView
  android:id="@android:id/list"
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent"
  android:drawSelectorOnTop="false"
  />
</LinearLayout>

 

 

 

// MenuDemo.java

 

package com.commonsware.android.menus;

import android.app.Activity;
import android.os.Bundle;
import android.app.ListActivity;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;


public class MenuDemo extends ListActivity {
 TextView selection;
 String[] items={"lorem", "ipsum", "dolor", "sit", "amet",
     "consectetuer", "adipiscing", "elit", "morbi", "vel",
     "ligula", "vitae", "arcu", "aliquet", "mollis",
     "etiam", "vel", "erat", "placerat", "ante",
     "porttitor", "sodales", "pellentesque", "augue", "purus"};
 public static final int EIGHT_ID = Menu.FIRST+1;
 public static final int SIXTEEN_ID = Menu.FIRST+2;
 public static final int TWENTY_FOUR_ID = Menu.FIRST+3;
 public static final int TWO_ID = Menu.FIRST+4;
 public static final int THIRTY_TWO_ID = Menu.FIRST+5;
 public static final int FORTY_ID = Menu.FIRST+6;
 public static final int ONE_ID = Menu.FIRST+7;

 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);
  setListAdapter(new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, items));
  selection=(TextView)findViewById(R.id.selection);
  
  registerForContextMenu(getListView());
  // Context Menu를 연결할 위젯의 인스턴스를 넘겨준다.
 }
 
 public void onListItemClick(ListView parent, View v,int position, long id) {
   selection.setText(items[position]);
 }
 
 @Override
 public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {
  // registerForContextMenu에서 등록할 때 지정했던 위젯의 인스턴스를 넘겨 받는다.
  // Context Menu는 생성될 때마다 onCreateContextMenu()메소드가 매번 호출된다.
  populateMenu(menu);
 }
 
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  populateMenu(menu);

  return(super.onCreateOptionsMenu(menu));
  // 상위클래스를 호출해 안드로이드 프레임웍에서 시스템 관련 메뉴 항목을 먼저 추가하게 해야 한다.
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // 사용자가 Option Menu의 특정 항목을 선택했다는 상태 반환.
  return(applyMenuChoice(item) ||
      super.onOptionsItemSelected(item));
 }

 @Override
 public boolean onContextItemSelected(MenuItem item) {
  // 사용자가 Context Menu의 특정 항목을 선택했다는 상태 반환.
  return(applyMenuChoice(item) ||
      super.onContextItemSelected(item));
 }
 
 private void populateMenu(Menu menu) {
  // public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title) 
  // groupId : 메뉴를 특별하게 그룹으로 묶어 setGroupChechable()메소드에서 활용하려는 경우가 아니라면 NONE으로 지정한다.
  // itemId : 메뉴 항목을 선택했을 때 호출되는 onOptionsItemSelected()메소드에서 선택된 항목을 지정할 때 사용되는 값.
  // order : 안드로이드 프레임웍이 추가한 메뉴와 섞여 있을 때 지금 추가하는 메뉴가 어느 위치에 들어가는지를 지정한다.
  // title : 메뉴항목의 텍스트
  menu.add(Menu.NONE, ONE_ID, Menu.NONE, "1픽셀");
  menu.add(Menu.NONE, TWO_ID, Menu.NONE, "2 픽셀");
  menu.add(Menu.NONE, EIGHT_ID, Menu.NONE, "8픽셀");
  menu.add(Menu.NONE, SIXTEEN_ID, Menu.NONE, "16픽셀");
  menu.add(Menu.NONE, TWENTY_FOUR_ID, Menu.NONE, "24 픽셀");
  menu.add(Menu.NONE, THIRTY_TWO_ID, Menu.NONE, "32픽셀");
  menu.add(Menu.NONE, FORTY_ID, Menu.NONE, "40픽셀");
 }
 
 private boolean applyMenuChoice(MenuItem item) {
  switch (item.getItemId()) {
   case ONE_ID:
    getListView().setDividerHeight(1);
    return(true);
  
   case EIGHT_ID:
    getListView().setDividerHeight(8);
    return(true);
  
   case SIXTEEN_ID:
    getListView().setDividerHeight(16);
    return(true);
  
   case TWENTY_FOUR_ID:
    getListView().setDividerHeight(24);
    return(true);
  
   case TWO_ID:
    getListView().setDividerHeight(2);
    return(true);
  
   case THIRTY_TWO_ID:
    getListView().setDividerHeight(32);
    return(true);
  
   case FORTY_ID:
    getListView().setDividerHeight(40);
    return(true);
  }

  return(false);
 }
}


Comments