Invalid text doesn't work in custom webview
I want to highlight the selected text in mine CustomWebView
because I implemented Actionmode
like this:
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);
}
}
After I removed the onTouchEvent from the following it worked, but onFling()
on webview it loses, it just scrolls horizontally.
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));
}
Is there something wrong with this code? The CAB is visible and working, but the problem is not selected.
source to share
Please let me know what your real question is: highlight selected text or is the page flip effect not working as expected?
Did you mean you are using a different library like https://github.com/openaphid/android-flip and it doesn't work?
IMHO how about using your own gesture detector and returning a super onTouch event?
Returning true for onTouchEvent means you want to consume the event and prevent the parent from propagating.
@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
See details: http://developer.android.com/reference/android/view/View.OnTouchListener.html
" Returns True if the listener is consuming the event; otherwise, false."
source to share