前言
在Android开发过程中偶尔会涉及到剪切板相关操作。今天,就让我们来学习下剪切板实现的一些功能吧。我把剪切板相关内容封装到一个类ClipboardHelper中,下面就来讲讲它的使用吧。
今天涉及的内容:
- ClipboardHelper类中方法简介
- MainActivity代码
- 效果图和项目结构图
- ClipboardHelper源码
先来波效果图
监听本app复制动作效果图
k.gif
监听其他app复制进来的效果图
k2.gif
一. ClipboardHelper类中方法简介
ClipboardHelperl作为一个剪切板帮助类,采用单例模式实例化。初始化该对象,你可以这样
ClipboardHelper helper=ClipboardHelper.getInstance();
一般我们直接用:
ClipboardHelper.getInstance();
ClipboardHelperl具备以下方法:
/**
* 注册剪切板复制、剪切事件监听
*
* @param context
* @param value 设置默认值后,获取的则是你设置的值,而不是监听的值。当设为null时,获取的是监听到的值
* @param listener
*/
registerClipEvents(Context context,String value,OnClipboardListener listener)
此方法用于监听本app中复制,剪切,粘贴动作。当 value 为 null 时,表示监听获取 “复制/剪切/粘贴”的内容,当 value 不为 null 时,表示监听 “复制/剪切/粘贴”动作,并显示 value 内容。
在监听本app 的 “复制/剪切/粘贴” 操作的时候,需要注册,当然在使用完后,则需要注销,下面贴出注销方法:
/**注销剪切板事件**/
unRegisterClipEvents()
ClipboardHelper类在监听本 app的 “复制/剪切/粘贴”动作时需要注册和注销动作。但是在获取剪切板内容的时候,则无需注册和注销动作。当你在其他app(如微信)中复制了内容,然后想在本app打开的时候,立马获取复制的内容,那么你可以调用以下方法:
/**
* 获取剪切板内容
* 适用场景:从别的app复制到本app时获取复制内容
* 如你复制了微信中的聊天内容,在打开你app的时候,要获取到你复制的内容,就可使用本方法
* 一般你app中要判断app是否在前台,或者将此方法放到你需要获取的界面的onResume()周期中
* 便于一打开此界面就能获取内容。
*
* 注:需要判断app回到前台
*/
getClipboardContent(Context context,OnClipboardListener listener)
此方法适用场景: 当你需要用户在其他app中复制了一个链接,然后进入 本app时,立马打开与该链接对应的活动的时候,可以使用本方法实现。
除此之外,ClipboardHelper还提供了一个设置本app中TextView内容可直接复制的设置方法。因为一般写的app中,如无特殊需求,TextView显示的内容都是禁止复制的。设置TextView内容可复制方法如下:
/**设置textView可被复制,剪切和粘贴**/
canBePasted(TextView textView)
二. MainActivity代码
下面贴出 ClipboardHelper 在MainActivity中使用代码:
/**
* Title:
*
* description:
* autor:pei
* created on ${DATE}
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView mTv;
private Button mBtn;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
setListener();
}
private void initData(){
mTv = findViewById(R.id.tv);
mBtn = findViewById(R.id.btn);
mTv.setText("作者法布尔更是用放松而又充满有趣的态度写下了自己对观察的每一只昆虫的观察日志。活灵活现地写出了昆虫在干什么的时候做了哪些动作,或者外表凶猛却又可爱的昆虫,也或许是其他内容。作者坚强不屈和遇到困难不退缩的精神使他获得了巨大的发现或有趣的动作。一直观察昆虫作者法布尔并没有感道乏味,而觉得昆虫是他的生命的一部分");
ClipboardHelper.getInstance().canBePasted(mTv);
}
private void setListener() {
mBtn.setOnClickListener(this);
ClipboardHelper.getInstance().registerClipEvents(MainActivity.this, null,new ClipboardHelper.OnClipboardListener() {
@Override
public void clipboard(String content) {
LogUtil.i("==========监听剪切内容======="+content);
if(StringUtil.isNotEmpty(content)) {
showAlertDialog("复制被监听了", content, R.mipmap.ic_launcher, "确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}, null, null);
}
}
});
}
@Override
protected void onResume() {
super.onResume();
//获取剪切板内容
ClipboardHelper.getInstance().getClipboardContent(MainActivity.this, new ClipboardHelper.OnClipboardListener() {
@Override
public void clipboard(String content) {
if(StringUtil.isNotEmpty(content)) {
showAlertDialog("提示", content, R.mipmap.ic_launcher, "确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}, null, null);
}
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn:
break;
default:
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销剪切板事件
ClipboardHelper.getInstance().unRegisterClipEvents();
}
/** 含有标题、内容、图标、两个按钮的对话框 **/
protected AlertDialog showAlertDialog(String title, String message, int icon, String positiveText,
DialogInterface.OnClickListener onPositiveClickListener, String negativeText,
DialogInterface.OnClickListener onNegativeClickListener) {
AlertDialog alertDialog = new AlertDialog.Builder(this).setTitle(title).setMessage(message).setIcon(icon)
.setPositiveButton(positiveText, onPositiveClickListener).setNegativeButton(negativeText, onNegativeClickListener).show();
return alertDialog;
}
}
三. 效果图和项目结构图
监听本app复制动作效果图
k.gif
监听其他app复制进来的效果图
k2.gif
项目结构图
image.png
四. ClipboardHelper源码
ClipboardHelper源码如下:
网友评论