欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

android重写webview长按时选择文字然后点击搜索按钮的事件,默认是chrome接受点击事件,现在跳转到360搜索页面_html/css_WEB-ITnose

程序员文章站 2024-01-01 10:29:52
...
用这个FindWebView替换默认使用的webview就可以了,重写SelectedText 类里地 show方法 string data就是获取到的选中的文字
import android.annotation.SuppressLint;
 import android.annotation.TargetApi;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Build;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.ActionMode;
 import android.view.ActionMode.Callback;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.webkit.JavascriptInterface;
 import android.webkit.WebSettings;
 import android.webkit.WebView;
/**  
* 在webview的界面里面填加 长按界面时出现搜索按钮 点击搜索按钮跳转到搜索页面  
*  
* @author 王训龙 360404113  
*        
  *         2014-8-8 上午11:39:16  */
   @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
   public class FindWebView extends WebView {     
   public Callback callback;     
   private OnScrollChangedListener mOnScrollChangedListener;         
   @SuppressWarnings("deprecation")    
    public FindWebView(Context context, AttributeSet attrs, int defStyle,                        
    boolean privateBrowsing) {         
    super(context, attrs, defStyle, privateBrowsing);         
    init();     }       
    public FindWebView(Context context, AttributeSet attrs, int defStyle) {         
    super(context, attrs, defStyle);         
    init();     
    }       
    public FindWebView(Context context, AttributeSet attrs) {         
    super(context, attrs);         
    init();     
    }       
    public FindWebView(Context context) {         
    super(context);         
    init();     
    }       
    @TargetApi(Build.VERSION_CODES.KITKAT)     
    @SuppressLint("SetJavaScriptEnabled")     
    private void init() {         
    WebSettings setting = getSettings();         
    setting.setJavaScriptEnabled(true);         
    setting.setJavaScriptCanOpenWindowsAutomatically(true);         
    addJavascriptInterface(new SelectedText(), "search");           
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Constants.DEBUG) {   
    //支持webview调试         
    WebView.setWebContentsDebuggingEnabled(true);         
    }       
    }       
    @Override     
    public ActionMode startActionMode(Callback callback) {         
CustomizedSelectActionModeCallback customizedSelectActionModeCallback = new CustomizedSelectActionModeCallback(   
callback);        
 return super.startActionMode(customizedSelectActionModeCallback);     
 }       
 @Override     
 public boolean onTouchEvent(MotionEvent event) {         
 return super.onTouchEvent(event);     
 }       
 public class CustomizedSelectActionModeCallback implements ActionMode.Callback {         
 private Callback callback;           
 public CustomizedSelectActionModeCallback(Callback callback) {             
 this.callback = callback;         
 }           
 @Override         
 public boolean onCreateActionMode(ActionMode mode, Menu menu) {             
 return callback.onCreateActionMode(mode, menu);         
 }           
 @Override         
 public boolean onPrepareActionMode(ActionMode mode, Menu menu) {             
 return callback.onPrepareActionMode(mode, menu);         
 }           
 @Override         
 public boolean onActionItemClicked(ActionMode mode, MenuItem item) {             
 if (item == null || TextUtils.isEmpty(item.getTitle())) {                 
 return callback.onActionItemClicked(mode, item);             
 }             
 if (!item.getTitle().toString().contains("搜索")                     
 && !item.getTitle().toString().contains("search")) {                 
 return callback.onActionItemClicked(mode, item);             
 }             
 loadUrl("javascript:window.search.show(window.getSelection().toString());");             
 clearFocus();             
 return true;         
 }           
 @Override         
 public void onDestroyActionMode(ActionMode mode) {             
 callback.onDestroyActionMode(mode);         
 }     
 }       
 public class SelectedText {         
 @JavascriptInterface         
 public void show(String data) {             
 // TODO 这里获取选中的文字            
  Intent intent = new Intent(getContext(), SearchActivity.class);             
  intent.putExtra(SearchActivity.TAG_SEARCH, data);             
  getContext().startActivity(intent);         
  }     
  }       
  private int dY;       
  @Override     
  protected void onScrollChanged(int l, int t, int oldl, int oldt) {         
  super.onScrollChanged(l, t, oldl, oldt);           
  int dy = t - oldt;         
  dY += dy;         
  if (mOnScrollChangedListener != null && Math.abs(dY) > 10) {             
  dY = 0;             
  mOnScrollChangedListener.onScroll(l, t, oldl, oldt);         
  }     
  }       
  public interface OnScrollChangedListener {         
  public void onScroll(int l, int t, int oldl, int oldt);     
  }       
  public void setOnScrollChangedListener(OnScrollChangedListener mOnScrollChangedListener) {         
  this.mOnScrollChangedListener = mOnScrollChangedListener;     
  } 
  }

以上就是android重写webview长按时选择文字然后点击搜索按钮的事件,默认是chrome接受点击事件,现在跳转到360搜索页面_html/css_WEB-ITnose的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关标签: android,webview

上一篇:

下一篇: