【Android】Custom Action Mode Menu

Custom EditText
kotlin 复制代码
import android.content.Context
import android.util.AttributeSet
import android.view.ActionMode
import androidx.appcompat.R
import androidx.appcompat.widget.AppCompatEditText

class ActionModeEdit : AppCompatEditText {

    constructor(context: Context) : this(context, null)
    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, R.attr.editTextStyle)
    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
        initView()
    }

    private fun initView() {
        customSelectionActionModeCallback = ActionModeCallback()
        customInsertionActionModeCallback = ActionModeCallback()
    }

    override fun startActionMode(delegate: ActionMode.Callback, type: Int): ActionMode {
        val callback = ActionModeCallback2(delegate)
        return super.startActionMode(callback, ActionMode.TYPE_FLOATING)
    }
}

res/menu/menu_edit.xml

xml 复制代码
<?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/select"
        android:orderInCategory="1"
        android:title="Select All"
        app:showAsAction="always" />
    <item
        android:id="@+id/cancel"
        android:orderInCategory="2"
        android:title="Cancel"
        app:showAsAction="always" />
</menu>
kotlin 复制代码
import android.view.ActionMode
import android.view.Menu
import android.view.MenuItem
import com.android.code.R

// control menu creation
class ActionModeCallback : ActionMode.Callback {

    override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
        return true
    }

    override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
        menu.clear()
        mode.menuInflater.inflate(R.menu.menu_edit, menu)
        return true
    }

    override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
        val id = item.itemId
        when (id) {
            R.id.select -> println("select")
            R.id.cancel -> println("cancel")
        }
        mode.finish()
        return true
    }

    override fun onDestroyActionMode(mode: ActionMode) {

    }
}
Custom Action Mode Display Rect
kotlin 复制代码
import android.graphics.Rect
import android.view.ActionMode
import android.view.Menu
import android.view.MenuItem
import android.view.View

// control display rect of menu
class ActionModeCallback2(
    private val delegate: ActionMode.Callback
) : ActionMode.Callback2() {

    override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {
        return delegate.onCreateActionMode(mode, menu)
    }

    override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {
        return delegate.onPrepareActionMode(mode, menu)
    }

    override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
        return delegate.onActionItemClicked(mode, item)
    }

    override fun onDestroyActionMode(mode: ActionMode) {
        delegate.onDestroyActionMode(mode)
    }

    override fun onGetContentRect(mode: ActionMode, view: View, outRect: Rect) {
        outRect.set(0, 0, view.width, view.height)
    }
}
相关推荐
La Pulga20 小时前
【STM32】FLASH闪存
android·c语言·javascript·stm32·单片机·嵌入式硬件·mcu
游戏开发爱好者821 小时前
iOS 崩溃日志分析工具全指南,多工具协同构建稳定性分析体系
android·macos·ios·小程序·uni-app·cocoa·iphone
晨陌y1 天前
深入剖析:仓颉语言的性能优化核心技术
android·性能优化·仓颉
xhbh6661 天前
【实战总结】MySQL日期加减大全:日期计算、边界处理与性能优化详解
android
00后程序员张1 天前
如何提高 IPA 安全性 多工具组合打造可复用的 iOS 加固与反编译防护体系(IPA 安全 iOS 加固 无源码混淆 Ipa Guard 实战)
android·安全·ios·小程序·uni-app·iphone·webview
张拭心1 天前
“不卷 AI、不碰币、下班不收消息”——Android 知名技术大牛 Jake Wharton 的求职价值观
android·前端·aigc
某空m1 天前
【Android】DrawerLayout实现侧边导航栏
android
stevenzqzq1 天前
Android开发工作经历整理
android·简历
洞窝技术1 天前
前端开发APP之跨平台开发(ReactNative0.74.5)
android·react native·ios
qq_717410012 天前
FAQ09934:相机prevew时候出现水印问题
android