Android Webview:覆盖上下文操作栏



我正在尝试覆盖Android Webview中的上下文操作栏。当我长按所选单词时,将显示自定义操作栏。但是,当我单击操作栏按钮时,没有任何反应。

似乎没有调用onContextItemSelected()函数。这是我的代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dictionary);
   mWebView = (WebView) findViewById(R.id.wv);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.save_word:
            Toast.makeText(CheckDictionary.this,"Save Word Meaning Successfully",Toast.LENGTH_LONG).show();
            break;
        default:
            break;
    }
    if (mActionMode != null) {
        mActionMode.finish();
    }
    return super.onContextItemSelected(item);
}
@Override
public void onActionModeStarted(ActionMode mode) {
    if (mActionMode == null) {
        mActionMode = mode;
        mode.setTitle("Save Word Meaning");
        Menu menu = mode.getMenu();
        menu.clear();
        mode.getMenuInflater().inflate(R.menu.dictionary_menu, menu);
    }
    super.onActionModeStarted(mode);
}
@Override
public void onActionModeFinished(ActionMode mode) {
    mActionMode = null;
    super.onActionModeFinished(mode);
}
}

我正在像这样在我的旧项目上做这项工作:

 private String[] data = {"1", "2", "3", "4", "5", "6", "7", "8", "9","10"};
 private SelectionAdapter mAdapter;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     mAdapter = new SelectionAdapter(this,
                 R.layout.row_list_item, R.id.textView1, data);
     setListAdapter(mAdapter);
     getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
     getListView().setMultiChoiceModeListener(new MultiChoiceModeListener() {
         private int nr = 0;
         @Override
         public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
             // TODO Auto-generated method stub
             return false;
         }
         @Override
         public void onDestroyActionMode(ActionMode mode) {
             // TODO Auto-generated method stub
              mAdapter.clearSelection();
         }
         @Override
         public boolean onCreateActionMode(ActionMode mode, Menu menu) {
             // TODO Auto-generated method stub
             nr = 0;
             MenuInflater inflater = getMenuInflater();
             inflater.inflate(R.menu.contextual_menu, menu);
             return true;
         }
         @Override
         public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
             // TODO Auto-generated method stub
             switch (item.getItemId()) {
                 case R.id.item_delete:
                     nr = 0;
                     mAdapter.clearSelection();
                     mode.finish();
             }
            return false;
         }
         @Override
         public void onItemCheckedStateChanged(ActionMode mode, int position,
                 long id, boolean checked) {
             // TODO Auto-generated method stub
              if (checked) {
                     nr++;
                     mAdapter.setNewSelection(position, checked);                    
                 } else {
                     nr--;
                     mAdapter.removeSelection(position);                 
                 }
                 mode.setTitle(nr + " selected");
         }
     });
     getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
         @Override
         public boolean onItemLongClick(AdapterView<? arg0, View arg1,
                 int position, long arg3) {
             // TODO Auto-generated method stub
             getListView().setItemChecked(position, !mAdapter.isPositionChecked(position));
             return false;
         }
     });
 }
 private class SelectionAdapter extends ArrayAdapter<String {
     private HashMap<Integer, Boolean mSelection = new HashMap<Integer, Boolean();
     public SelectionAdapter(Context context, int resource,
             int textViewResourceId, String[] objects) {
         super(context, resource, textViewResourceId, objects);
     }
     public void setNewSelection(int position, boolean value) {
         mSelection.put(position, value);
         notifyDataSetChanged();
     }
     public boolean isPositionChecked(int position) {
         Boolean result = mSelection.get(position);
         return result == null ? false : result;
     }
     public Set<Integer getCurrentCheckedPosition() {
         return mSelection.keySet();
     }
     public void removeSelection(int position) {
         mSelection.remove(position);
         notifyDataSetChanged();
     }
     public void clearSelection() {
         mSelection = new HashMap<Integer, Boolean();
         notifyDataSetChanged();
     }
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         View v = super.getView(position, convertView, parent);//let the adapter handle setting up the row views
         v.setBackgroundColor(getResources().getColor(android.R.color.background_light));

         if (mSelection.get(position) != null) {
             v.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_light);
         }
         return v;
     }
 } 

您可以根据需要在此代码中进行更改...

请尝试以下步骤

public class MyWebView extends WebView {
    MyActivity theListener;
    Context context;
    GestureDetector gd;
    public MyWebView(Context context, AttributeSet attributes) {
        super(context, attributes);
        this.context = context;
        gd = new GestureDetector(context, sogl);
    }
    // This is new
    public void setListener(MyActivity l) {
        theListener = l;
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gd.onTouchEvent(event);
    }
    GestureDetector.SimpleOnGestureListener sogl =
                new GestureDetector.SimpleOnGestureListener() {
        public boolean onDown(MotionEvent event) {
            return true;
        }
        public void onLongPress(MotionEvent event) {
            theListener.onLongClick(MyWebView.this);
        }
    };
}

和活动中

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout);
    MyWebView mwv = (MyWebView) findViewById(R.id.mwv);
    registerForContextMenu(mwv);
}
public boolean onLongClick(View v) {
    openContextMenu(v);
    return true;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenu.ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context, menu);
}

最新更新