`
hemowolf
  • 浏览: 151592 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

TextView支持拷贝&粘帖

阅读更多

   让TextView支持长按弹出系统自带的拷贝、粘贴功能,发现国内外的论坛提供的解决方法都不怎么理想。多数用editview来模仿,不过实现的效果实在不怎么好。
   从android sdk 11起google添加了新api TextIsSelectable控制TextView是否支持拷贝、粘帖功能,不过这个功能在v11以下则不那么好彩了。
   查阅TextView源码发现setTextIsSelectable实际调用的是Editor类的相应方法,而Editor里面控制了拷贝、粘帖功能。顺藤摸瓜通过反射获取到mEditor变量再调用setTextIsSelectable里调用的方法,调出拷贝、粘帖功能。似乎这是个很好的方法。不过很遗憾在系统为4.x的不同设备里测试发现都不成功,不是没有mEditor变量就是mEditor返回null。看来这个Editor在不同的厂商也有不同的实现,google也把这个类标为hide。

   又仔细看了看TextView源码,发现setTextIsSelectable顺序调用了以下几个函数

 

	setFocusableInTouchMode(true);
	setFocusable(true);
	setClickable(true);
	setLongClickable(true);
	setMovementMethod(  ArrowKeyMovementMethod.getInstance());
	setText(tv.getText(),BufferType.SPANNABLE );

  在v4、v8系统测试顺利调出拷贝、粘帖功能。

分享到:
评论
2 楼 hemowolf 2013-06-27  
ladyweiwei 写道
请问这个源码可以看看吗?在网上搜不到啊

在sdk 4、8系统用下列方法我测试顺利调出拷贝、粘帖功能。
setFocusableInTouchMode(true); 
setFocusable(true); 
setClickable(true); 
setLongClickable(true); 
setMovementMethod(  ArrowKeyMovementMethod.getInstance()); 
setText(tv.getText(),BufferType.SPANNABLE ); 

sdk11以上用setTextIsSelectable
1 楼 ladyweiwei 2013-06-25  
请问这个源码可以看看吗?在网上搜不到啊

相关推荐

Global site tag (gtag.js) - Google Analytics