class PrimaryActionModeCallback : ActionMode.Callback {
var onActionItemClickListener: OnActionItemClickListener? = null
private var mode: ActionMode? = null
@MenuRes private var menuResId: Int = 0
private var title: String? = null
private var subtitle: String? = null
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
this.mode = mode
mode.menuInflater.inflate(menuResId, menu)
mode.title = title
mode.subtitle = subtitle
return true
}
override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}
override fun onDestroyActionMode(mode: ActionMode) {
this.mode = null
}
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
onActionItemClickListener?.onActionItemClick(item)
mode.finish()
return true
}
fun startActionMode(view: View,
@MenuRes menuResId: Int,
title: String? = null,
subtitle: String? = null) {
this.menuResId = menuResId
this.title = title
this.subtitle = subtitle
view.startActionMode(this)
}
fun finishActionMode() {
mode?.finish()
}
}
@RequiresApi(Build.VERSION_CODES.M)
class FloatingActionModeCallback : ActionMode.Callback2() {
var onActionItemClickListener: OnActionItemClickListener? = null
private var mode: ActionMode? = null
@MenuRes private var menuResId: Int = 0
private var contentLeft: Int = 0
private var contentTop: Int = 0
private var contentRight: Int = 0
private var contentBottom: Int = 0
override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
this.mode = mode
mode.menuInflater.inflate(menuResId, menu)
return true
}
override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
return false
}
override fun onDestroyActionMode(mode: ActionMode) {
this.mode = null
}
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
onActionItemClickListener?.onActionItemClick(item)
mode.finish()
return true
}
override fun onGetContentRect(mode: ActionMode, view: View, outRect: Rect) {
outRect.set(contentLeft, contentTop, contentRight, contentBottom)
}
fun startActionMode(view: View,
@MenuRes menuResId: Int,
contentLeft: Int = 0, contentTop: Int = 0,
contentRight: Int = view.width, contentBottom: Int = view.height) {
this.menuResId = menuResId
this.contentLeft = contentLeft
this.contentTop = contentTop
this.contentRight = contentRight
this.contentBottom = contentBottom
view.startActionMode(this, ActionMode.TYPE_FLOATING)
}
fun finishActionMode() {
mode?.finish()
}
}
interface OnActionItemClickListener {
fun onActionItemClick(item: MenuItem)
}
// Start primary ActionMode
val primaryActionModeCallback = PrimaryActionModeCallback()
primaryActionModeCallback.startActionMode(view, R.menu.menu_actions, "Title", "Subtitle")
// Start floating ActionMode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val floatingActionModeCallback = FloatingActionModeCallback()
floatingActionModeCallback.startActionMode(view, R.menu.menu_actions, x, y, width, height)
}
You can get description from here
,这是对我的项目所做的一些修改。