액션 모드는 특정 상황에 임시적으로 열리는 액션바다. (에디트 텍스트를 길게 누른다던지.._
액션 모드는 이전에 컨텍스트 메뉴를 대체하는 장치이다.
액션 모드는 액티비티의 다음 메소드로 시작한다.
ActionMode startActionMode(ActionMode.Callback callback)
인수로 액션 모드의 메뉴를 관리하는 콜백 객체를 요구하며 생성된 액션 모드 객체를 리턴한다. 콜백 인터페이스의 메소드는 옵션 메뉴의 콜백과 유사하다.
boolean onCreateActionMode(ActionMode mode, Menu menu)
boolean onPrepareActionMode(ActionMode mode, Menu menu)
boolean onActionItemClicked(ActionMode mode, MenuItem item)
void onDestroyActionMode(ActionMode mode)
메뉴의 생성, 준비, 선택, 파괴 시에 각 콜백이 호출된다. 액티비티에 정의된 메뉴 관련 콜백과 거의 비슷하지만 인수로 ActionMode를 받는다는 점이 다르다.
다음은 버튼을 누르면 액션 모드를 보여주는 예제이다.
예제 구성
actionmodetestmenu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.ch21_actionmodetest.ActionModeTest" >
<item
android:id="@+id/add"
android:title="add"
android:icon="@android:drawable/ic_menu_add"
android:showAsAction="always|withText"
/>
<item
android:id="@+id/edit"
android:title="edit"
android:icon="@android:drawable/ic_menu_edit"
android:showAsAction="always|withText"
/>
<item
android:id="@+id/search"
android:title="search"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="always|withText"
/>
</menu>
actionmodetest.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/btnaction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="mOnClick"
android:text="Action Mode"
/>
</LinearLayout>
ActionModeTest.java
package com.example.ch21_actionmodetest;
import android.app.Activity;
import android.os.Bundle;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class ActionModeTest extends Activity {
ActionMode mActionMode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actionmodetest);
}
public void mOnClick(View v){
switch(v.getId()){
case R.id.btnaction:
//버튼 클릭시 액션 모드가 실행된다.
if(mActionMode == null){
mActionMode = startActionMode(mActionCallback);
mActionMode.setTitle("Test");
}
break;
}
}
ActionMode.Callback mActionCallback = new ActionMode.Callback() {
@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
//액션 모드가 끝나면 mActionMode를 해지한다.
mActionMode = null;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
//액션 모드 메뉴를 생성해주는 부분
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.actionmodetestmenu, menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// TODO Auto-generated method stub
//액션 모드의 아이템이 클릭됬을때 처리는 여기서 함
switch(item.getItemId()){
case R.id.add:
Toast.makeText(ActionModeTest.this, "add", 0).show();
break;
case R.id.edit:
Toast.makeText(ActionModeTest.this, "edit", 0).show();
break;
case R.id.search:
Toast.makeText(ActionModeTest.this, "search", 0).show();
break;
}
return false;
}
};
}
실행 화면
버튼을 누르면 다음과 같이 뜬다
연필 모양 클릭시 토스트 메시지가 나온다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 시스템 클립보드를 활용한 데이터 복사 붙여넣기 (0) | 2015.11.07 |
---|---|
안드로이드 - 압축 파일 사용하기 (0) | 2015.11.05 |
안드로이드 - 파일 탐색기 만들기 (2) | 2015.11.04 |
안드로이드 - 하드웨어 가속 기능 (0) | 2015.10.25 |
안드로이드 - 액션바 꾸미기 (0) | 2015.10.25 |
안드로이드 - DialogFragment에 스타일과 테마 지정하기 (0) | 2015.10.24 |
안드로이드 - 프래그먼트 대화상자를 액티비티 안에 배치하기 (0) | 2015.10.12 |
안드로이드 - DialogFragment 로 대화상자 만들기 (0) | 2015.10.11 |