android中对剪贴板的简单操作

今天看到群里一个兄弟发了一个链接,是介绍Clipboard操作剪贴板的,感觉很有意思,就仔细阅读了下。
链接文章地址
下面,将自己的理解与例子记录一下。
对于剪贴板的操作,其实还是很简单的,只要几行代码就可以轻松搞定了。我们先看最简单的就是把文字接收过来。
这里我写了两个页面,一个MainActivity.java,一个PasteActivity.java。从名字上就能看出来,一个是操作一个是接收剪贴板的页面。代码如下:
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.cg.clipboardlearn.MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="在下方输入要复制的文字:" />
    <EditText
        android:id="@+id/edit_txt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btn_copy"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="复制到剪切板"/>
    <Button
        android:id="@+id/btn_nextPage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="到下一页"/>
</LinearLayout>

MainActivity.java

package com.example.cg.clipboardlearn;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

/**
 * Clipboard是Android提供的一个系统服务,它提供了一个全局的剪贴板,让文字、图片、数据,在多App间共享成为可能
 * 作者:cg
 * 时间:2016/11/16 0016 上午 11:13
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText edit_txt;
    private Button btn_copy;
    private Button btn_nextPage;

    /**
     * 定义一个剪贴板管理
     */
    private ClipboardManager mClipboardManager;

    private ClipData mClipData;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mClipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);

        initControls();
    }

    /**
     * 初始化控件
     */
    private void initControls() {
        edit_txt = (EditText)findViewById(R.id.edit_txt);

        btn_copy = (Button)findViewById(R.id.btn_copy);
        btn_copy.setOnClickListener(this);

        btn_nextPage = (Button)findViewById(R.id.btn_nextPage);
        btn_nextPage.setOnClickListener(this);


    }

    @Override
    public void onClick(View view) {



        switch (view.getId())
        {
            case R.id.btn_copy:

                /**
                 * 将文字信息放到剪贴板上
                 */

                mClipData = ClipData.newPlainText("text",edit_txt.getText().toString());
                mClipboardManager.setPrimaryClip(mClipData);
                break;
            case R.id.btn_nextPage:

                PasteActivity.PasteActivityStart(this);

                break;

    }
}

activity_paste.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.cg.clipboardlearn.PasteActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="显示粘贴过来的内容:"/>
    <TextView
        android:id="@+id/txt_paste"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_getData"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="得到数据"/>
</LinearLayout>

PasteActivity.java

package com.example.cg.clipboardlearn;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * 接收剪贴板文字内容
 * 作者:cg
 * 时间:2016/11/16 0016 下午 3:12
 */
public class PasteActivity extends AppCompatActivity implements View.OnClickListener {


    public static void PasteActivityStart(Context context)
    {
        Intent intent = new Intent();
        intent.setClass(context,PasteActivity.class);
        context.startActivity(intent);
    }

    private TextView txt_paste;
    private Button btn_getData;

    private ClipboardManager mClipboardManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_paste);

        mClipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);

        initControls();
    }

    /**
     * 初始化控件
     */
    private void initControls() {
        txt_paste = (TextView)findViewById(R.id.txt_paste);

        btn_getData = (Button)findViewById(R.id.btn_getData);
        btn_getData.setOnClickListener(this);

        /**
         * 判断当前剪贴板上存在Copy,获取按钮可用,如果
         */
        if(mClipboardManager.hasPrimaryClip())
        {
            btn_getData.setEnabled(true);
        }
        else
        {
            btn_getData.setEnabled(false);
        }
    }

    @Override
    public void onClick(View view) {
        switch (view.getId())
        {
            case R.id.btn_getData:

                /**
                 * 将剪贴板上的文字信息取出来放到文本框中
                 */
                ClipData mClipData = mClipboardManager.getPrimaryClip();
                ClipData.Item item = mClipData.getItemAt(0);
                txt_paste.setText(item.getText().toString());

                break;
        }
    }
}

通过上面的代码,我们就可以很轻松的在PasteActivity页面中得到文字内容,这个时候,做一个很有意思的实验,我们到短信页面,复制一段短信内容,回到PasteActivity页面,点按钮,你得到的就是你复制的短信内容。
ClipboardManager可以创建三种类型的ClipData
分别是Text,URI,intent
下面来看一下intent的操作。新建一个ThreeActivity.java页面,是个空页,就是为了起到跳转用。修改
MainActivity.java页面代码

package com.example.cg.clipboardlearn;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

/**
 * Clipboard是Android提供的一个系统服务,它提供了一个全局的剪贴板,让文字、图片、数据,在多App间共享成为可能
 * 作者:cg
 * 时间:2016/11/16 0016 上午 11:13
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText edit_txt;
    private Button btn_copy;
    private Button btn_nextPage;
    private Button btn_intent;

    /**
     * 定义一个剪贴板管理
     */
    private ClipboardManager mClipboardManager;

    private ClipData mClipData;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mClipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);

        initControls();
    }

    /**
     * 初始化控件
     */
    private void initControls() {
        edit_txt = (EditText)findViewById(R.id.edit_txt);

        btn_copy = (Button)findViewById(R.id.btn_copy);
        btn_copy.setOnClickListener(this);

        btn_nextPage = (Button)findViewById(R.id.btn_nextPage);
        btn_nextPage.setOnClickListener(this);

        mClipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
            @Override
            public void onPrimaryClipChanged() {
                Log.e("MainActivity", "剪切板有变化哦");
            }
        });

        btn_intent = (Button)findViewById(R.id.btn_intent);
        btn_intent.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {



        switch (view.getId())
        {
            case R.id.btn_copy:

                /**
                 * 将文字信息放到剪贴板上
                 */

                mClipData = ClipData.newPlainText("text",edit_txt.getText().toString());
                mClipboardManager.setPrimaryClip(mClipData);
                break;
            case R.id.btn_nextPage:

                /**
                 * 这里做一个有意思的操作
                 * 我们判断一下,剪贴板里是不是Intent对象,如果是就操作它。如果不是,跳到我们文字接收页面
                 */
                mClipData = mClipboardManager.getPrimaryClip();
                ClipData.Item item = mClipData.getItemAt(0);


                if(item.getIntent()!=null)
                {
                    startActivity(item.getIntent());
                }
                else {
                    PasteActivity.PasteActivityStart(this);
                }
                break;

            case R.id.btn_intent:

                /**
                 * 我们将一个intent放到剪贴板上
                 */
                Intent intent = new Intent();
                intent.setClass(this,ThreeActivity.class);

                mClipData = ClipData.newIntent("Three",intent);
                mClipboardManager.setPrimaryClip(mClipData);
                break;
        }
    }
}

运行一下,是不是很有意思。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值