您的位置:首页 > 移动开发 > Android开发

android] TextView文本的 “选择文字”“复制” “

2013-11-25 11:22 543 查看
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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: