我想在我的CustomWebView
中突出显示选定的文本,为此我实现了Actionmode
如下......
public class CustomWebView extends WebView {
public ActionMode mActionMode;
public ActionMode.Callback mActionModeCallback;
private ActionMode.Callback mSelectActionModeCallback;
public CustomWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomWebView(Context context) {
super(context);
this.context = context;
sm = new ScreenManager((Activity) context);
}
@Override
public ActionMode startActionMode(Callback callback) {
ViewParent parent = getParent();
if (parent == null) {
return null;
}
String name = "";
if (callback != null)
name = callback.getClass().toString();
if (name.contains("SelectActionModeCallback")) {
mSelectActionModeCallback = callback;
}
System.out.println("startActionMode"+name);
mActionModeCallback = new CustomActionModeCallback();
return super.startActionModeForChild(this, mActionModeCallback);
}
private class CustomActionModeCallback implements ActionMode.Callback {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
mActionMode = mode;
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.reader_epub_menu, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false; // Return false if nothing is done
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_highlight_add:
loadUrl(highlightSelection());
break;
case R.id.action_note_add:
frag.call(spineIndex, tocIndex);
break;
}
mActionMode.finish();
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
frag.makeSwipeEnable();
clearFocus(); // Remove the selection highlight and handles.
if (mSelectActionModeCallback != null) {
mSelectActionModeCallback.onDestroyActionMode(mode);
}
mActionMode = null;
}
}
public ActionMode getActionMode() {
return mActionMode;
}
and my in my reader fragment implemented Gesture listner as follows
public class GestureListener extends
GestureDetector.SimpleOnGestureListener {
@Override
public void onLongPress(MotionEvent e) {
makeSwipeDisable();
reader.startActionMode(reader.mActionModeCallback);
reader.dispatchTouchEvent(e);
super.onLongPress(e);
}
}
我从下面删除onTouchEvent后,它的工作,但onFling()
上的webview失去,它只是水平滚动。
reader = new CustomWebView(getActivity()) {
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
// TODO Auto-generated method stub
super.onScrollChanged(l, t, oldl, oldt);
// checking whether the current page has been bookmarked and
// animates the ribbon down and up
if (isBookmarked(rOffset, currentContent))
scaleDown();
else
scaleUp();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return (gestureDetector.onTouchEvent(event) || super
.onTouchEvent(event));
}
这个代码有什么问题吗?CAB是可见的并且正在工作,但是问题是没有选择文本。
请让我知道你真正的问题是什么:高亮选中的文本或页面翻转效果不能正常工作?
你的意思是,你正在使用其他库,如https://github.com/openaphid/android-flip,它不工作吗?
IMHO,单独使用你自己的手势检测器并返回super onTouch事件怎么样?
onTouchEvent返回true意味着你想要消费事件,并防止传播到父节点。
@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
看到细节:http://developer.android.com/reference/android/view/View.OnTouchListener.html
"返回如果监听器已经使用了事件,则返回True,否则返回false。"