android重写webview长按时选择文字然后点击搜索按钮的事件,默认是chrome接受点击事件,现在跳转到360搜索页面
用这个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
* <p/>
* 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;
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。