이번 시간에는 메뉴를 원할 때만 보여주는 동적 메뉴 만드는 방법을 알아보겠습니다.
메뉴 폴더 만드는 방법과 파일 만드는 방법은 이전 포스팅을 보시면 됩니다.
2022.08.23 - [안드로이드] - [안드로이드 코틀린] 옵션 메뉴(OptionMenu), 서브메뉴(Sub Menu) 만드는 방법
- 설명 -
1. 동적 메뉴에 쓰이는 아이템
2. 아이콘 res -> drawable
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_delete"
android:icon="@drawable/ic_delete"
android:title="Delete"/>
<item
android:id="@+id/menu_share"
android:icon="@drawable/ic_share"
android:title="Share"/>
</menu>
- 설명 -
1. 동적 메뉴가 보이는 액션바 색상 설정
2. style 태그 안에 추가하면 됩니다.
<item name="actionModeBackground">@color/purple_500</item>
- 설명 -
1. 동적 메뉴 호출하는 Button
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rootView"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="길게 눌러보세요"/>
<Button
android:id="@+id/btn_dynamic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="동적 메뉴"/>
</LinearLayout>
- 설명 -
1. startActionMode
동적메뉴 호출
2. onCreateActionMode
액션 모드 생성 시 호출
3. onPrepareActionMode
액션 모드 준비 시 호출
4. onActionItemClicked
액션 모드 아이템 선택 시 호출
5. onDestroyActionMode
액션 모드 끝나면 호출
class MainActivity : AppCompatActivity(){
lateinit var rootView: LinearLayout
var actionMode: ActionMode? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
rootView = findViewById(R.id.rootView)
val textView: TextView = findViewById(R.id.textView)
//컨텍스트 메뉴 연결
registerForContextMenu(textView)
//버튼 이벤트
val btnDynamic: Button = findViewById(R.id.btn_dynamic)
btnDynamic.setOnLongClickListener {
//액션모드 값이 있다면
if(actionMode != null){
false
}
//동적 메뉴 실행
actionMode = startActionMode(mActionModeCallback)
true
}
}//onCreate
//액션모드 설정
private val mActionModeCallback: ActionMode.Callback = object : ActionMode.Callback{
//액션모드 생성시 호출
override fun onCreateActionMode(mode: ActionMode, menu: Menu?): Boolean {
val menuInflater = mode.menuInflater
menuInflater.inflate(R.menu.dynamic_menu, menu)
return true
}
//액션모드 준비 시 호출
override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}
//액션모드 아이템 선택 시 호출
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
return when(item.itemId){
R.id.menu_delete ->{
Toast.makeText(applicationContext,"삭제 모드", Toast.LENGTH_SHORT).show()
mode.finish()
true
}
R.id.menu_share -> {
Toast.makeText(applicationContext,"공유 모드", Toast.LENGTH_SHORT).show()
mode.finish()
true
}
else -> false
}
}
//액션모드 끝나면 호출
override fun onDestroyActionMode(p0: ActionMode) {
actionMode = null
}
}
/**
* 컨텍스트메뉴 설정
*/
override fun onCreateContextMenu(
menu: ContextMenu?,
v: View?,
menuInfo: ContextMenu.ContextMenuInfo?
) {
super.onCreateContextMenu(menu, v, menuInfo)
val inflater: MenuInflater = menuInflater
inflater.inflate(R.menu.context_menu, menu)
}
/**
* 컨텍스트메뉴 선택 기능
*/
override fun onContextItemSelected(item: MenuItem): Boolean {
when(item.itemId){
R.id.menu_red -> {
rootView.setBackgroundColor(Color.RED)
return true
}
R.id.menu_blue -> {
rootView.setBackgroundColor(Color.BLUE)
return true
}
R.id.menu_green -> {
rootView.setBackgroundColor(Color.GREEN)
return true
}
else -> return false
}
}
/**
* 옵션메뉴 설정
*/
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val inflater: MenuInflater = menuInflater
inflater.inflate(R.menu.option_menu, menu)
return true
}
/**
* 옵션메뉴 선택 기능
*/
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when(item.itemId){
R.id.item1 -> {
Toast.makeText(this, "아이템1 선택", Toast.LENGTH_SHORT).show()
return true
}
R.id.item2 -> {
Toast.makeText(this, "아이템2 선택", Toast.LENGTH_SHORT).show()
return true
}
R.id.item3 -> {
Toast.makeText(this, "아이템3 선택", Toast.LENGTH_SHORT).show()
return true
}
R.id.subItem1 -> {
Toast.makeText(this, "서브아이템1 선택", Toast.LENGTH_SHORT).show()
return true
}
R.id.subItem2 ->{
Toast.makeText(this, "서브아이템2 선택", Toast.LENGTH_SHORT).show()
return true
}
else -> return false
}
}
}
2022.08.24 - [안드로이드] - [안드로이드 코틀린 ] 콘텍스트 메뉴(ContextMenu) 바탕화면 변경하는 방법
2022.08.22 - [안드로이드] - [안드로이드 코틀린] 텍스트뷰(TextView) 다양하게 꾸며보는 방법
2022.08.19 - [안드로이드] - [안드로이드 코틀린] 속성 애니메이션 (이미지를 움직이게 하는 방법)
[안드로이드 코틀린] 야구 게임 만드는 방법 part1 - 화면 구성 (0) | 2022.08.29 |
---|---|
[안드로이드 코틀린] 텍스트뷰 TextView 클릭 시 효과(ripple)주는 방법 (0) | 2022.08.26 |
[안드로이드 코틀린 ] 컨텍스트메뉴(ContextMenu) 바탕화면 변경하는 방법 (2) | 2022.08.24 |
[안드로이드 코틀린] 옵션메뉴(OptionMenu), 서브메뉴(Sub Menu) 만드는 방법 (0) | 2022.08.23 |
[안드로이드 코틀린] 텍스트뷰(TextView) 다양하게 꾸며보는 방법 (0) | 2022.08.22 |
댓글 영역