一、需求描述:
基于android的webview实现如下长按文本后弹出的自定义菜单样式,要点包括:
1、全部使用自定义的按钮,按钮控件由上方图标+下方文案组成。
2、菜单背景框颜色、透明度、四个边角弧度可调整
``
二、当前实现效果:
和需求的差异: 1、菜单项的文字上方没有图标 2、菜单背景框不符合要求三、当前实现方案:
参考https://blog.csdn.net/limonzet/article/details/102723688 这篇博客实现,在菜单样式上的总结实现要点如下:
1、继承webview类,重载startActionMode方法,
@Override
public ActionMode startActionMode(ActionMode.Callback callback) {
return super.startActionMode(buildCustomCallback(callback));
}
@Override
public ActionMode startActionMode(ActionMode.Callback callback, int type) {
return super.startActionMode(buildCustomCallback(callback), type);
}
2、buildCustomCallback中重载Callback的onPrepareActionMode和onCreateActionMode方法,清理原来的默认菜单,add自己的菜单项目,通过Menu的add方法添加设置文本、setIcon设置图标
/**
* 添加自定义菜单
*
* @param actionMode
*/
private ActionMode addCustomMenu(ActionMode actionMode) {
if (actionMode != null && mCustomMenuList != null) {
Menu menu = actionMode.getMenu();
menu.clear();
int groupId = 0;
//添加自定义选项
int size = mCustomMenuList.size();
for (int i = 0; i < size; i++) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(getContext().getPackageName(), ""));
String title = mCustomMenuList.get(i);
// 设置菜单文本、设置菜单图标
menu.add(groupId, 0, 0, title).setIcon(R.drawable.copy).setIntent(intent);
}
mActionMode = actionMode;
}