如果是触屏手机,长触屏幕会自动弹出复制粘贴选项,键盘手机应该会有一个弹出选项的键子,具体键子不同手机会不同,按出选项键就可以复制粘贴了
创新互联主要从事成都网站建设、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务铜梁,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
字符编码问题,先复制代码到浏览器地址栏,然后再次复制,粘贴到Android Studio,此时会变成很长一行代码,但不会报错了。再按住ctrl + Alt +L自动换行整理代码就会显示正常啦!
最近开发过程中有使用到复制/粘帖功能,也在其中遇到了一些问题,就顺势学习一下复制粘贴相关的知识。
Android提供了一个强大的剪切板框架(以至于在复制某些内容粘帖到我的项目中的时候出现的格式问题的BUG)用于复制和粘帖。同时支持简单和复杂的数据类型,简单的文本数据直接存储在剪贴板中,而复杂的数据存储为一个引用,即粘贴应用程序解析为内容提供者(这里涉及到ContentProvider)。
可以看出 Android 剪贴板框架主要涉及到 ClipboardManager 、 ClipData 、 ClipData.Item 、 ClipDescription 这四个类,下面详细说明
接下来看看简单的使用,以文本操作为例
创建 ClipData 的方法还有另外四个:
从剪切板中获取数据,同样以文本操作为例
Designing Effective Copy/Paste Functionality
To design effective copy and paste functionality for your application, remember these points:
为设计有效的复制和粘贴功能,请记住以下几点:
参考资料:
API Guides: Copy and Paste:
最好用的是Native Clipboard,没有之一。
剪贴板应用通常采取驻留在通知栏或者弹出气泡的方式,每次粘贴的时候总要长按并选择“粘贴”,非常反人类,尤其是需要一次粘贴多条内容的时候,特别痛苦。
Native Clipboard最特色的功能也是最方便的功能就是双击粘贴(有三种打开剪贴板的方式,推荐双击方式),极大的简化了粘贴步骤。
需要粘贴时直接在要输入内容的地方双击,即可调出剪贴板并覆盖输入法键盘,点击复制的条目即可上屏,并且可乱序点击多条内容直接粘贴上屏。这种操作方式比通过在通知栏或者气泡中点击复制后,再在需要输入的地方长按选择“粘贴”的操作方式方便太多。在一次粘贴多条内容时这种差距尤其明显。
/**
* Android用于复制粘贴数据的框架Copy and Paste。 支持简单和复杂的数据,包括本文(Text)、
* 复杂的数据结构(text and binary stream data)、数据流(Stream)、程序 asset等。
*/
public class MainActivity extends Activity implements OnClickListener {
private EditText copy_edt, paste_edt;
private Button copy_btn, paste_btn;
//剪切板管理工具类
private ClipboardManager mClipboardManager;
//剪切板Data对象
private ClipData mClipData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mClipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
initViews();
initListeners();
}
private void initViews() {
this.copy_btn = (Button) findViewById(R.id.copy_btn);
this.paste_btn = (Button) findViewById(R.id.paste_btn);
this.copy_edt = (EditText) findViewById(R.id.copy_edt);
this.paste_edt = (EditText) findViewById(R.id.paste_edt);
}
private void initListeners() {
this.copy_btn.setOnClickListener(this);
this.paste_btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String copy = copy_edt.getText().toString().trim();
switch (v.getId()) {
case R.id.copy_btn:
if (TextUtils.isEmpty(copy)) {
Toast.makeText(getApplicationContext(), "请输入内容!",
Toast.LENGTH_SHORT).show();
return;
}
//创建一个新的文本clip对象
mClipData = ClipData.newPlainText("Simple test", copy);
//把clip对象放在剪贴板中
mClipboardManager.setPrimaryClip(mClipData);
Toast.makeText(getApplicationContext(), "文本已经复制成功!",
Toast.LENGTH_SHORT).show();
break;
case R.id.paste_btn:
//GET贴板是否有内容
mClipData = mClipboardManager.getPrimaryClip();
//获取到内容
ClipData.Item item = mClipData.getItemAt(0);
String text = item.getText().toString();
paste_edt.setText(text);
Toast.makeText(getApplicationContext(), "粘贴成功!s",
Toast.LENGTH_SHORT).show();
break;
}
}
}
网上找的代码做为参考:
当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的剪贴板里。
clip object可以有三种形式:
Text:文字字符串。
文字是直接放在clip对象中,然后放在剪贴板里;粘贴这个字符串的时候直接从剪贴板拿到这个对象,把字符串放入你的应用存储中。
URI:一个Uri 对象。
表示任何形式的URI。这种形式主要用于从一个content provider中复制复杂的数据。
复制的时候把一个Uri 对象放在一个clip对象中,然后再放在剪贴板里;粘贴的时候取出这个clip对象,得到Uri,把它解析为一个数据资源比如content provider,然后从资源中复制数据到应用存储中。
Intent: Intent对象。
这支持了复制应用快捷方式。
复制的时候把Intent对象放在clip对象中,再放入剪贴板;粘贴数据时,从clip对象中得到Intent对象,放入应用存储区域中。