美文网首页高级UI
android剪切板操作

android剪切板操作

作者: 奔跑的佩恩 | 来源:发表于2019-11-05 22:50 被阅读0次

前言

在Android开发过程中偶尔会涉及到剪切板相关操作。今天,就让我们来学习下剪切板实现的一些功能吧。我把剪切板相关内容封装到一个类ClipboardHelper中,下面就来讲讲它的使用吧。

今天涉及的内容:

  1. ClipboardHelper类中方法简介
  2. MainActivity代码
  3. 效果图和项目结构图
  4. 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源码如下:

相关文章

  • 3.5 UiPath剪贴板操作的介绍和使用

    剪切板操作的介绍模拟用户使用剪切板操作的一种行为:例如使用设置剪切板(SettoClipboard),从剪切板获取...

  • android剪切板操作

    前言 在Android开发过程中偶尔会涉及到剪切板相关操作。今天,就让我们来学习下剪切板实现的一些功能吧。我把剪切...

  • Android 剪切板ClipboardManager过时问题

    Android 剪切板ClipboardManager过时问题 导入包注意 API 11之前: android.t...

  • iOS oc-剪切板

    一、自带剪切板操作的原生UI控件 在iOS的UI系统中,有3个控件自带剪切板操作,分别是UITextField、U...

  • python 操作剪切板

    有时候写脚本的时候会有操作系统剪切板的需求,就是 获取剪切板中的字符串 清空剪切板 向剪切板中写入字符串 方法包括...

  • Linux 终端快捷键

    剪切板操作 光标操作 文本处理操作 任务处理操作 标签页处理操作 窗口操作 历史命令操作 其他操作

  • 2019-06-10

    接的shareSDKQQ分享,无论成功与否 他会对剪切板操作俩次所以剪切板的changeCount会+2 微信分享...

  • android之ClipboardManager使用

    ClipboardManager ClipboardManager是Android系统剪贴板的主要类。使用剪切板功...

  • 终端快捷键

    Linux终端快捷键 剪切板操作 Ctrl+Shi ft+C 复制Ctrl+Shift+V 粘贴 光标操作 ...

  • 岁寒输入法剪切板的使用方法

    河图4.7.4/洛书1.10.1开始,岁寒输入法对剪切板功能进行了增强,除了已有的清空剪切板操作外,还增加了锁定和...

网友评论

    本文标题:android剪切板操作

    本文链接:https://www.haomeiwen.com/subject/qqwrbctx.html