상세 컨텐츠

본문 제목

[안드로이드] 동적 메뉴(ActionMode) 만들어 보기

안드로이드

by aries574 2021. 1. 11. 19:43

본문


2021/01/07 - [안드로이드] - [안드로이드] 다이얼로그(Dialog) 사용자정의 (Custom) 화면으로 보여주기

2021/01/08 - [안드로이드] - [안드로이드]프래그먼트(Fragment) 간의 데이터 전달방법(Listener)

2021/01/09 - [안드로이드] - [안드로이드]바로가기메뉴(ContextMenu) 바탕화면 변경해보기

2021/01/10 - [안드로이드] - [안드로이드] 리스트(RecyclerView) 와 바로가기메뉴(ContextMenu)


이번 시간에는 메뉴화면을 동적으로 생성하는 예제를 만들어 보겠습니다. 


1-1 메뉴폴더 생성

1-2 메뉴파일 생성

파일명은 dynamic_menu로 하겠습니다.


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_delete"
android:icon="@drawable/ic_delete"
android:title="Delete"/>
<item
android:id="@+id/action_share"
android:icon="@drawable/ic_share"
android:title="Share"/>
</menu>


2. 메인화면 구현(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/rootView"
>

<Button
android:id="@+id/btn_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="동적메뉴"
/>
</RelativeLayout>


3. 메인코드 구현(MainActivity.java)


import androidx.appcompat.app.AppCompatActivity;
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.Button;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

private Button btn_menu;

private ActionMode actionMode = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn_menu = findViewById(R.id.btn_menu);
btn_menu.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {

if(actionMode != null){
return false;
}

actionMode = startActionMode(mActionModeCallback);
return true;
}
});
}

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {

//액션모드 생성시 호출
MenuInflater menuInflater = mode.getMenuInflater();
menuInflater.inflate(R.menu.dynamic_menu, menu);
return true;
}

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
//액션모드 준비시 호출
return false;
}

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
//액션모드 아이템 선택시 호출
switch (item.getItemId()){
case R.id.action_delete:
displayMessage("삭제모드 선택");
mode.finish();
return true;
case R.id.action_share:
displayMessage("공유모드 선택");
mode.finish();
return true;
default:
return false;
}
}

@Override
public void onDestroyActionMode(ActionMode mode) {
//액션모드 끝날때 호출
actionMode = null;
}
};

public void displayMessage(String message){

Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}

}


4. 실행화면


2021/01/07 - [안드로이드] - [안드로이드] 다이얼로그(Dialog) 사용자정의 (Custom) 화면으로 보여주기

2021/01/08 - [안드로이드] - [안드로이드]프래그먼트(Fragment) 간의 데이터 전달방법(Listener)

2021/01/09 - [안드로이드] - [안드로이드]바로가기메뉴(ContextMenu) 바탕화면 변경해보기

2021/01/10 - [안드로이드] - [안드로이드] 리스트(RecyclerView) 와 바로가기메뉴(ContextMenu)

반응형

관련글 더보기

댓글 영역