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;

}

}

时间: 2024-10-18 03:29:15

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

页面禁止长按选择文字

//长按禁止选择文字* { -webkit-touch-callout:none; -webkit-user-select:none; -khtml-user-select:none; -moz-user-select:none; -ms-user-select:none; user-select:none; } 如果是想禁用长按弹出菜单, 用 js node.addEventListener('contextmenu', function(e){ e.preventDefault(); });

Android学习之解决ListView中item点击事件和item中Button点击事件冲突问题

在ListView中添加Button后,如果只是单纯的加入而不加限制的话,ListView的onClick点击事件没有响应,因为Button获取了item的焦点,想要两者都可点击,需要加上如下限制: 在ListView的适配器中的布局文件中添加: (1)在布局文件的根元素上中添加属性android:descendantFocusability="blocksDescendants" (2)在Button中添加属性android:focusable="false"和a

Android中点击事件的来源

转载请注明出处: http://blog.csdn.net/a992036795/article/details/51690303 本文将分以下在步骤寻找android中事件的来源: 一.activity启动时 创建window以及windowManager的过程. 二.调用setContentView设置布局的过程 三.Activity在onResume之后创建ViewRootImp将window和DecorView关联的过程 四.创建InputChanel 发送给InputManagerSe

【转】Android - Button(按钮)的响应点击事件的4种写法

原文网址:http://www.yrom.net/blog/2011/12/12/android-4-onclicklistener-of-button/ Button控件setOnclickListener(View.OnClickListener listener)来接收一个点击事件的监听器 自定义一个点击事件监听器类让其实现View.OnClickListener的onClick(View v)方法 1 2 3 4 5 class MyOnClickListener implements

Android中点击事件的实现方式

在之前博文中多次使用了点击事件的处理实现,有朋友就问了,发现了很多按钮的点击实现,但有很多博文中使用的实现方式有都不一样,到底是怎么回事.今天我们就汇总一下点击事件的实现方式. 点击事件的实现大致分为以下三种: (1)Activity 实现接口方式实现点击事件(经常使用) (2)自定义方法,使用配置文件android:onclick (3)使用内部类方式实现 (4)使用匿名内部类实现介绍下几种点击事件的实现方式: 下面我们通过代码来简单演示下几种点击事件的实现方式: (1)Activity 实现

android实现双击事件暨多击事件详解

最近在多击事件上稍微研究了下,在此做简要分析,供大家吐槽参考 方法一: 将两次点击的时间间隔小于0.5s的默认为双击事件 <span style="font-family:SimSun;font-size:14px;">mBtn1.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getA

Android入门——电话拨号器和四种点击事件

相对于HelloWorld来说,电话拨号器也是Android的一个入门demo,从这个例子我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 1. 理解需求: *一个文本框--用来接收电话号码 *一个按钮--用来触发事件 2. 设计UI 3. 代码实现 public class MainActivity extends Activity { private EditText et_number; //定义变量用来接收电话号码 priva

屏蔽电信流氓广告造成的诡异的问题--Android WebView 长时间不能加载页面

发现在家里的时候用Android App里的WebView打开网站很慢,会有十几秒甚至更长时间的卡住. 但是在电脑上打开同样的网页却很快. 查找这个问题的过程比较曲折,记录下来. 抓取Android网络数据 为了调试这个问题,首先要抓取Android的网络包数据.开始时,是想用Wireshark来抓包的,但是很麻烦,tcpdump在手机要root权限. 于是转换思路,能不能在Android上设置代理,来抓包? 但是fiddler没有linux版本,于是转用BurpSuite了. 设置Androi

android 之 webView 显示h5 执行选择图片或者拍照功能

开发工具是 android studio SDK版本是 4.3实现过程基本是这样h5中调用手机选择文件图片的代码是: <input accept="image/*" capture="camera" id="imgFile" name="imgFile" type="file"> 然后给webView 设置WebChromeClient WebChromeClient 主要处理解析,渲染网页等浏