Android 实现复制黏贴

EditText的长按事件会自动弹出上下文菜单,其中有“选择文字”“复制”“粘贴”等功能选项,想让TextView也具有这样的功能,经研究,EditText就是继承于TextView而来的,在TextView的源码中就存在“选择文字”“复制”“粘贴”等功能的代码,(但是为什么在布局中添加<TextView />组件却不能直接使用这些功能呢,尚有待研究),我发现一种简单方法可以使EditText“变成”具有“选择文字”“复制”“粘贴”等功能的“TextView”,在布局文件中这样写(注意:一定要写上粗体的那几句代码):

 

   <EditText

        android:editable="false"

       android:gravity="top"
       android:background="#030303"
       android:textColor="#FFFFFF" 
      
 android:id="@+id/tv"      
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"

       android:text="sdfsdaddfsfsf "
        />

 

这样设置的EditText运行后展现出来的就像是一个TextView了


如果在书写代码时感觉用EditText当TextView很奇怪,可以自定义一个View继承于EditText,比如:

 

package com.test;

 

public class MyTextView extends EditText {

 public MyTextView(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
 }
 
 public MyTextView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
 }
 
 public MyTextView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  // TODO Auto-generated constructor stub
 }
 
 @Override
    protected boolean getDefaultEditable() {//等同于在布局文件中设置 android:editable="false"

        return false;
    }
}

 

在布局文件中则写为:

 <com.test.MyTextView

       android:background="#030303"
      android:textColor="#FFFFFF"

      android:gravity="top"
       android:id="@+id/tv"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:text="sdfsdaddfsfsf" 
      />

 

-------------------------------------------------------------------------------------------------

以上方法虽然实现了文本的选择、复制等功能,但是感觉使用起来不方便,需要长按组件,在弹出的上下文菜单中选择“选择文本”,然后再去选中想要的字,这一系列的操作比较繁琐,用户体验不是很好。

下面再来研究一个比较灵活的自定义TextView的实现,可以直接选中文本的。
-------------------------------------------------------------------------------------------------

 

此效果的实现需要两个步骤:

1.选择 文本:

(有待研究)

 有一个 Selection 类~

 

2.设置到剪贴板中:

 

android的剪贴板功能,比如将文本复制到剪贴板或者从剪贴板复制数据等操作。使用起来很简单,系统给我们提供了很方便的接口,如下所示:
//获取剪贴板管理服务
ClipboardManager cm =(ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
//将文本数据复制到剪贴板
cm.setText(message);


//读取剪贴板数据(EditText的长按事件会自动弹出上下文菜单,其中有“粘贴”的功能选项,应该是调用了下面的方法获得要粘贴的数据。这个粘贴的功能系统已经实现了,不需要我们自己调用了。)
cm.getText();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值