Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- kotlin
- multipart
- BottomSheetDialogFragment
- todo
- ThreeTen Backport
- layout_constrainedHeight
- SSAID
- Navigation
- 생명주기
- DataBinding
- Popup menu background color
- findNavController
- log
- Load failed
- WorkManager
- 화면 회전
- RecyclerView
- Room
- NumberPIcker
- 기기고유값
- Collections Function
- DialogFragment
- Android
- layout_constrainedWidth
- http
- gradle plugin
- Retrofit2
- Lifecycle
- json
- studywithme
Archives
- Today
- Total
chacha's
💬 Popup Menu 사용하기 본문
How change position of popup menu on android overflow button? - stack overflow
Popup menu with icons - Android Code Snippets
를 참고하여 작성한 게시물입니다.
1. menu 리소스 작성하기
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/list_action_delete"
android:icon="@drawable/ic_delete"
android:title="delete" />
<item
android:id="@+id/list_action_rename"
android:icon="@drawable/ic_rename"
android:title="rename" />
</menu>
2. popup menu style 리소스 정의하기
// res/menu/pop_up_menu.xml
<style name="PopupMenuStyle" parent="Widget.AppCompat.PopupMenu.Overflow">
<item name="android:itemBackground">@color/colorSecondary</item>
</style>
3. Activity/Fragment에서 Popup menu 보여주기
아래의 코드는 Fragment에서 popup menu를 보여주는 코드입니다.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
MusicAdapter.DeleteItemListener { view, item ->
// Long 클릭 시 해당 Item 지우기
showPopupMenu(view, item)
true
}
...
}
// popup menu 보여주는 method
private fun showPopupMenu(view: View?, item: MusicItem) {
// popoup menu 에 적용할 style
val contextThemeWrapper =
ContextThemeWrapper(requireContext(), R.style.PopupMenuStyle)
// popup menu 가 보일 위치
val popupBase =
(view as MaterialCardView).findViewById<TextView>(R.id.pupup_container)
// popup menu 선언
val popupMenu = PopupMenu(contextThemeWrapper, popupBase)
popupMenu.menuInflater.inflate(R.menu.pop_up_menu, popupMenu.menu)
popupMenu.setOnMenuItemClickListener { m ->
when (m.itemId) {
R.id.list_action_delete -> androidViewModel.removeFile(item.absolutePath)
R.id.list_action_rename -> androidViewModel.renameFile(item.absolutePath)
}
false
}
// Icon 보여주기
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
popupMenu.setForceShowIcon(true)
} else {
try {
val fields = popupMenu.javaClass.declaredFields
for (field in fields) {
if ("mPopup" == field.name) {
field.isAccessible = true
val menuPopupHelper = field[popupMenu]
val classPopupHelper = Class.forName(menuPopupHelper.javaClass.name)
val setForceIcon: Method = classPopupHelper.getMethod(
"setForceShowIcon",
Boolean::class.javaPrimitiveType
)
setForceIcon.invoke(menuPopupHelper, true)
break
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
popupMenu.show()
}
END
'Android > My Library' 카테고리의 다른 글
⏰ Android FCM 푸시 알림 (0) | 2021.11.08 |
---|---|
💰 Chip 사용하기 (0) | 2021.08.06 |
🧭 Navigation을 이용해서 Dialog로 전환하기 (0) | 2021.06.09 |
♻ RecyclerView 에 🎩Header 추가하기 (0) | 2021.06.07 |
♻ RecyclerView에 👆 Click 이벤트 추가하기 (0) | 2021.06.07 |
Comments