Android SupportLib ViewPager 反白问题

本文介绍了解决在ViewPager中包含WebView时出现的文本标记被中断的问题。通过反射及重写onInterceptTouchEvent方法,实现了在不同Android API版本下文本标记功能的正常运作。

最近实现了一个ViewPager滑动的效果,但是意外的发现,在ViewPager里面如果有WebView控件,里面的内容是可以Mark的

但是在Mark时如果第一次操作是横向的Mark,在Mark两个字符左右的时候ViewPager就会响应中断然后横向滑动,这让人情何以堪啊~~

折腾了一会儿,最后整个反射然后重写中断方法在2.3上解决了,但是API 15+发现有时候Mark不上,实在搞不定了,先放着吧

public class XXXXXPager extends ViewPager {

	public XXXXXPager(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	@Override
	public boolean onInterceptTouchEvent(MotionEvent arg0) {
		// TODO Auto-generated method stub
		boolean touchSelection = false;
		requestFocus();
		if (getFocusedChild() != null) {
			WebView mWebView = (WebView) getFocusedChild().findViewById(
					R.id.webview);
			if (mWebView != null) {
				Class<?> webViewClass = mWebView.getClass();
				try {
					Field selectionField = webViewClass
							.getDeclaredField("mSelectingText");
					if (selectionField != null) {
						selectionField.setAccessible(true);
						touchSelection = selectionField.getBoolean(mWebView);
					}
				} catch (SecurityException e1) {
					e1.printStackTrace();
				} catch (NoSuchFieldException e1) {
					e1.printStackTrace();
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally {
					// touchSelection = false;
				}
			}
		}
		if (touchSelection) {
			return false;// false
		} else {
			return super.onInterceptTouchEvent(arg0);
		}
	}
}


续:

API15+的问题也搞定了,不过方法很无耻。。把WebView上下scroll一个像素,这样就能保证第一次mark的时候能相应到反白函数里了,方法如下:

重写ViewPager里的finish函数

		@Override
         public void finishUpdate(View arg0) {

			ViewPager mViewPager = (ViewPager) arg0;
			mViewPager.requestFocus();
			WebView mWebView = (WebView)mViewPager.getFocusedChild().findViewById(R.id.knowledge_webview);
			if(mWebView!=null)
			{
				mWebView.scrollBy(0,1);
				mWebView.scrollBy(0,-1);
			}
         }



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值