[Android] ContextMenu Android 2011. 12. 16. 11:52
컨텍스트 메뉴는 뷰를 누르고 있으면 뜨는 화면이다. 예를들자면.. Select All 등과 같은 그런 화면을 본 적이 있을 것이다.

Copy, Paste 등과 같은..

이것은 최초 registerForContextMenu(View view)를 통해 등록 한 후

onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ConTextMenuInfo info) 를 통하여
그 화면 구성을 나타낸다.

물론 선택 내용에 대해서는 onContextItemSelected(MenuItem item) 을 통해서 그 이벤트를 정의 한다.

다음은 그 예제 코드이다.

main.xml

<Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#ff0000"       
        android:text="Button"
        android:textSize="20px"
        />
    <EditText
        android:id="@+id/edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="edit"
        />

java

/** Called when the activity is first created. */
 Button btn;
 EditText edit;
 @Override   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button)findViewById(R.id.btn);
        edit = (EditText)findViewById(R.id.edit);
       
        registerForContextMenu(btn);
        registerForContextMenu(edit);
    }
 
 @Override 
 public void onCreateContextMenu(ContextMenu menu,View view, ContextMenu.ContextMenuInfo info){
  super.onCreateContextMenu(menu,view,info);
  
  if(view==btn){
   menu.setHeaderTitle("Button menu");
   menu.add(0,1,0,"Red");
   menu.add(0,2,0,"Green");
   menu.add(0,3,0,"Blue");
  }
  else if(view==edit){
   menu.add(0,4,0,"텍스트1");
   menu.add(0,5,0,"텍스트2");
  }
 }
 
 @Override 
 public boolean onContextItemSelected(MenuItem item){
  switch(item.getItemId()){
  case 1:
   btn.setTextColor(Color.RED);
   return true;
  case 2:
   btn.setTextColor(Color.BLUE);
   return true;
  case 3:
   btn.setTextColor(Color.GREEN);
   return true;
  case 4:
   Toast.makeText(this, "1번", Toast.LENGTH_SHORT).show();
   return true;
  case 5:
   Toast.makeText(this, "2번", Toast.LENGTH_SHORT).show();
   return true;
  }
  return false;
 }

다음을 실행 해 보면 버튼을 누르고 있을 떄와 에디트텍스트를 누르고 있을 때 서로 다른 점을 확인 할 수가 있을 것이다.