안 드 로 이 드 학습 노트-메뉴 소개(2)

5889 단어 AndroidMenu
지식 포인트:
이번 에는 이전 글 에서 다 말 하지 못 한 Menu 학습,컨 텍스트 메뉴(Context menu)와 팝 업 메뉴(Popup menu)를 계속 할 것 입 니 다.
컨 텍스트 메뉴
컨 텍스트 메뉴 는 UI 인터페이스의 특정 항목 이나 컨 텍스트 프레임 워 크 에 대한 동작 을 제공 합 니 다.마치 Windows 에서 오른쪽 단 추 를 누 르 는 메뉴 와 같 습 니 다.
Android 에 서 는 상하 문 조작 을 제공 하 는 두 가지 방식 이 있 습 니 다.하 나 는 떠 다 니 는 상하 문 메뉴(길 게 누 르 면 팝 업)이 고,다른 하 나 는 상하 문 조작 모드 입 니 다.

그렇다면 어떻게 움 직 이 는 컨 텍스트 메뉴(floating context menu)를 만 듭 니까?
1.registerForContextMenu()방법 을 View 등록 컨 텍스트 메뉴 로 호출 합 니 다.
2.Activity 나 Fragment 에서 onCreate ContextMenu()방법 을 실현 합 니 다.
3.onContextItemSelected()방법 을 실현 하여 사용자 가 메뉴 항목 을 길 게 누 르 는 이벤트 에 응답 합 니 다.
다음은 컨 텍스트 메뉴 의 demo 입 니 다.

private TextView textView;
  final int RED = 0x101;
  final int BLUE = 0x102;
  final int GREEN = 0x103;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    textView=(TextView)findViewById(R.id.textView);
    // textView       
    registerForContextMenu(textView);
  }
//       
  @Override
  public void onCreateContextMenu(ContextMenu menu, View v,
      ContextMenuInfo menuInfo) {
    menu.add(0, RED, 0, "Red");
    menu.add(0, BLUE, 0, "Blue");
    menu.add(0,GREEN,0,"Green");
    menu.setHeaderTitle("Set the color of the textView");
    menu.setGroupCheckable(0, true, true);
  }
  //       
  @Override
  public boolean onContextItemSelected(MenuItem item) {
     switch (item.getItemId()) {
    case GREEN:
      item.setChecked(true);
      textView.setBackgroundColor(Color.GREEN);
      break;
    case BLUE:
      item.setChecked(true);
      textView.setBackgroundColor(Color.BLUE);
      break;
    case RED:
      item.setChecked(true);
      textView.setBackgroundColor(Color.RED);
      break;
    }
     return true;
  }



상하 문 조작 모드 사용
상하 문 조작 모델 은 시스템 ActionMode 인 터 페 이 스 를 실현 하고 사용자 의 상호작용 을 주목 하여 상하 문 조작 행 위 를 실현 하 는 것 이다.사용자 가 메뉴 항목 을 선택 하여 이 모드 를 실행 하면 사용자 가 선택 한 메뉴 항목 을 조작 할 수 있 는 컨 텍스트 action bar 가 화면 상단 에 나타 납 니 다.사용 자 는 여러 가지(select multi items),선택 취소(deselect),작업 완료(Done),반환(BACK)등 을 선택 할 수 있 습 니 다.
그럼 상하 문 조작 모드 는 언제 호출 합 니까?
다음 두 가지 상황 에서 호출:
1.사용자 가 View 에 대해 길 게 누 르 기(long-click)동작 을 수행 합 니 다.
2.사용 자 는 View 에서 체크 상자(checkbox)나 비슷 한 UI 구성 요 소 를 선택 하 였 습 니 다.
상하 문 조작 모드 를 어떻게 사용 합 니까?
이것 도 두 가지 상황 으로 나 뉜 다.
1.독립 된 뷰
먼저 ActionMode.Callback 인 터 페 이 스 를 실현 한 다음 startActionMode()방법 을 호출 합 니 다.
2.ListView 또는 GirdView(또는 다른 AbsListView 의 확장)
AbsListView.MultiChoiceModeListener 인 터 페 이 스 를 실현 하고 set MultiChoiceModeListener()방법 을 호출 하여 CHOICEMODE_MULTIPLE_MODAL 매개 변 수 는 set ChoiceMode()방법 을 호출 합 니 다.

private ListView listView;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    listView=(ListView)findViewById(R.id.listview1);
    String arr[]={"New York","Shanghai","Los Angle","BeiJing","Paris","Tykyo","Moscow","Berlin","HongKong"};
    //      ArrayAdapter
    ArrayAdapter<String> adapter1= new ArrayAdapter<String>(this,R.layout.array_item ,arr);
    listView.setAdapter(adapter1);
    
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
      
      @Override
      public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        // TODO Auto-generated method stub
        return false;
      }
      
      @Override
      public void onDestroyActionMode(ActionMode mode) {
        // TODO Auto-generated method stub
        
      }
      
      @Override
      public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        // TODO Auto-generated method stub
          MenuInflater inflater = mode.getMenuInflater();
          inflater.inflate(R.menu.contextmenu, menu);
          return true;
      }
      
      @Override
      public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
      case R.id.done:
        Toast.makeText(MainActivity.this, "You have clicked the DONE", Toast.LENGTH_LONG).show();
        break;
      case R.id.cancel:
        Toast.makeText(MainActivity.this, "You have clicked the CANCEL", Toast.LENGTH_LONG).show();
      default:
        break;
      }  
        return true;
      }
      
      @Override
      public void onItemCheckedStateChanged(ActionMode mode, int position,
          long id, boolean checked) {
        // TODO Auto-generated method stub
        
      }
    });
  }


좋은 웹페이지 즐겨찾기