我已经搜索了很多内容,也在stackoverflow上找到了一些教程和答案,但我仍然遇到了一些困难来解决这个问题。
我有一个带有WebView的片段,并且当用户选择我的 WebView 中的某些文本时,我想显示我的自定义上下文操作栏。 这里有两个主要问题:
1.目前,当用户在 WebView 的任何部分执行长按时,会显示我的自定义 CAB。 2.当用户在我的 WebView 中的某些文本上执行长按时,文本未被选中。
以下是我的一些目前的代码:
自定义接口:
在我的片段中,有以下内容:
我有一个带有WebView的片段,并且当用户选择我的 WebView 中的某些文本时,我想显示我的自定义上下文操作栏。 这里有两个主要问题:
1.目前,当用户在 WebView 的任何部分执行长按时,会显示我的自定义 CAB。 2.当用户在我的 WebView 中的某些文本上执行长按时,文本未被选中。
以下是我的一些目前的代码:
自定义接口:
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) {
}
}
Custom 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;
}
};