我已经搜索了很多内容,并在stackoverflow中找到了一些教程和答案,但我面临一些难以解决此问题。
我有一个带有WebView的片段,当用户选择我的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) {
}
}
自定义WebView
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;
}
};
答案 0 :(得分:3)
有一个更好的方式!请参阅以下答案:https://stackoverflow.com/a/22391169/2608235
<小时/> 简而言之,您无法使用OnLongClickListener
并将选择保留在WebView
内。 Android在WebViews
内选择文本后,会在幕后做一些奇怪的事情。如果您覆盖OnLongClickListener
以致拨打startActionMode
,则您将失去选择,如您所知。
您应该做的是覆盖片段中的startActionMode
,而不是其父View
(在您的情况下为CustomWebView
)。
我没有mod权限将此问题标记为副本,但确实如此 有关详细信息,请参阅我的问题:Use a custom contextual action bar for WebView text selection