설.현.아빠
[MENU] 구현해보기 본문
<?xml version="1.0" encoding="utf-8"?> <!-- main.xml --> // MenuDemo.java package com.commonsware.android.menus; import android.app.Activity; @Override return(super.onCreateOptionsMenu(menu)); @Override @Override return(false);
<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>
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;
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);
// 상위클래스를 호출해 안드로이드 프레임웍에서 시스템 관련 메뉴 항목을 먼저 추가하게 해야 한다.
}
public boolean onOptionsItemSelected(MenuItem item) {
// 사용자가 Option Menu의 특정 항목을 선택했다는 상태 반환.
return(applyMenuChoice(item) ||
super.onOptionsItemSelected(item));
}
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);
}
}
}