3

我想在我的 中突出显示选定的文本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 是可见的并且可以工作,但问题是没有选择文本。

4

1 回答 1

2

请让我知道您真正的问题是什么:突出显示选定的文本或翻页效果无法正常工作?

您的意思是,您正在使用其他库,例如https://github.com/openaphid/android-flip并且它不起作用?

恕我直言,单独使用您自己的手势检测器并返回超级 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。"

于 2015-08-12T11:41:15.243 回答