webview 通过actionmode 长按实现页面文字自定义复制、全选、分享、搜索、翻译功能
时间: 2023-10-01 16:09:27 浏览: 325
是的,通过设置`ActionMode.Callback`回调可以在`WebView`中实现长按文字弹出自定义菜单的功能。以下是一个简单的示例代码:
```java
webView.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
private final String[] items = new String[]{"复制", "全选", "分享", "搜索", "翻译"};
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// 创建菜单项
for (String item : items) {
menu.add(item);
}
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
// 根据菜单项处理相应的操作
String selectedText = webView.getSelectedText();
switch (item.getTitle().toString()) {
case "复制":
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
clipboardManager.setPrimaryClip(ClipData.newPlainText(null, selectedText));
Toast.makeText(MainActivity.this, "已复制到剪贴板", Toast.LENGTH_SHORT).show();
break;
case "全选":
webView.selectAll();
break;
case "分享":
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, selectedText);
startActivity(Intent.createChooser(intent, "分享"));
break;
case "搜索":
Intent searchIntent = new Intent(Intent.ACTION_WEB_SEARCH);
searchIntent.putExtra(SearchManager.QUERY, selectedText);
startActivity(searchIntent);
break;
case "翻译":
// 调用翻译接口,处理翻译结果
break;
}
mode.finish();
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
```
上述代码会在长按`WebView`中的文字时弹出一个自定义菜单,其中包含了复制、全选、分享、搜索和翻译等功能。你可以根据自己的需求,修改菜单项和处理方式。
阅读全文