在Android的WebView中选择文本时如何覆盖上下文操作栏?
Posted
技术标签:
【中文标题】在Android的WebView中选择文本时如何覆盖上下文操作栏?【英文标题】:How to override Contextual Action Bar when selecting text in a WebView in Android? 【发布时间】:2014-04-04 21:13:40 【问题描述】:我在 Google 上搜索了很多,并在 *** 中找到了一些教程和答案,但我在解决这个问题时遇到了一些困难。
我有一个带有 WebView 的片段,我想在用户选择我的 Web 视图的某些文本时显示我的自定义上下文操作栏。我这里有两个主要问题:
1 目前,当用户在 Web 视图的任何部分执行长按时会显示我的自定义 CAB。 2 用户在我的 Web 视图的某些文本中执行长按时未选择文本。我当前的一些代码:
自定义界面:
public class SelectActionModeCallback implements ActionMode.Callback
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
return false;
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
return false;
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item)
return false;
@Override
public void onDestroyActionMode(ActionMode mode)
自定义网页视图
public class CustomWebView extends WebView
private SelectActionModeCallback actionModeCallback;
public CustomWebView(Context context, AttributeSet attrs)
super(context, attrs);
@Override
public ActionMode startActionMode(Callback callback)
actionModeCallback = new SelectActionModeCallback();
return super.startActionMode(actionModeCallback);
在我的片段中,我有这个:
@Override
public void onResume()
super.onResume();
myWebView.setOnLongClickListener(new View.OnLongClickListener()
public boolean onLongClick(View view)
if (mActionMode != null)
Toast.makeText(getActivity(), "test", Toast.LENGTH_SHORT).show();
return false;
mActionMode = getActivity().startActionMode(mActionModeCallback);
view.setSelected(true);
return true;
);
private SelectActionModeCallback mActionModeCallback = new SelectActionModeCallback()
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.custom, menu);
return true;
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
return false;
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item)
switch (item.getItemId())
case R.id.action_sustom:
customMethod();
mode.finish();
return true;
default:
return false;
@Override
public void onDestroyActionMode(ActionMode mode)
mActionMode = null;
;
【问题讨论】:
【参考方案1】:还有更好的方法!请参阅以下答案:https://***.com/a/22391169/2608235
简而言之,您不能使用
OnLongClickListener
并将选择保留在WebView
内。 android 在幕后做了一些奇怪的事情来选择WebViews
中的文本。如果您覆盖OnLongClickListener
以调用startActionMode
,您将失去选择,正如您所发现的。
您应该做的是在您的片段中覆盖startActionMode
,而不是其父View
(在您的情况下为CustomWebView
)。
我没有将此问题标记为重复问题的 mod 权限,但确实如此。 有关更多信息,请参阅我的问题:Use a custom contextual action bar for WebView text selection
【讨论】:
以上是关于在Android的WebView中选择文本时如何覆盖上下文操作栏?的主要内容,如果未能解决你的问题,请参考以下文章
在Android的WebView中修改选择时文本选择菜单消失