Context Menu

Context 메뉴란 UI에서 특정한 항목에 영향을 주는 동작을 선택할 수 있는 메뉴를 말한다.

Context 메뉴 생성방법은 크게 2가지가 있는데 floating context menu, context action menu 이다. 각 메뉴 생성방법에 대해 알아보자.

Floating Context Menu

화면을 long click 하면 나타나는 방식이다.

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mButton1 = (Button)findViewById(R.id.button1);
 
        registerForContextMenu(mButton1);
    }

registerForContextMenu에 해당 위젯을 등록시킨다.

    //floating context menu
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
 
        menu.setHeaderTitle("Context menu");
        menu.add(0, 1, 0, "apple");
        menu.add(0, 2, 0, "grape");
    }

onCreateContextMenu는 Context 메뉴를 보여줘야 할 시점에 호출된다.

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                return true;
            case 2:
                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }

onContextItemSelected는 메뉴 이벤트 처리함수이다.

Context Action Mode

Context Action Mode를 구현하기 위해서는 View.OnLongClickListener, ActionMode.Callback 인터페이스르 구현해야 한다.

ActionMode 인터페이스를 구현하기 위해서는 아래의 4개의 메소드를 오버라이딩 해야 한다.

  ActionMode mActionMode;
 
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = mode.getMenuInflater();
 
        inflater.inflate(R.menu.actions, menu);
 
        return true;
    }

onCreateActionMode는 startActivity가 호출될 때 호출되는 콜백 메소드

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }

onPrepareActionMode는 액션모드를 refresh하는 목적으로 아무것도 하지 않으면 false, 액션 메뉴가 업데이트되면 true 반환

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch(item.getItemId()) {
            case R.id.apple:
                mode.finish();
                return true;
            case R.id.grape:
                mode.finish();
                return true;
            default:
                return false;
        }
    }

onActionItemClicked는 사용자가 액션 메뉴의 항목을 클릭했을 때 호출

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        mActionMode = null;
    }

onDestroyActionMode는 액션 모드를 종료시켰을 때 호출

@Override
public boolean onLongClick(View view) {
    if(mActionMode!=null) {
        return false;
    }
 
    mActionMode = this.startSupportActionMode(this);
    view.setSelected(true);
    return true;
}

리스너를 등록한 위젯에서 LongClick시 ActionMode를 실행시키기 위해 startSupportActionMode를 사용하여 컨텍스트의 액션 모드를 실행한다.

'IT > Android' 카테고리의 다른 글

Popup Menu 생성  (0) 2017.10.23
AlertDialog를 이용하여 RatingBar 띄우기  (0) 2017.10.23
Intent  (0) 2017.10.23
Action Bar  (0) 2017.10.23
Dialog  (0) 2017.10.23

+ Recent posts