• Android Clipboard(复制/剪贴板)


    Android提供的剪贴板框架,复制和粘贴不同类型的数据。数据可以是文本,图像,二进制流数据或其它复杂的数据类型。

    Android提供ClipboardManager、ClipData.Item和ClipData库使用复制和粘贴的框架。为了使用剪贴板的框架,需要把数据转化为剪辑对象,然后把该对象为全系统剪贴板。

    为了使用剪贴板,需要通过调用getSystemService()方法来实例化ClipboardManager的对象。它的语法如下:

    ClipboardManager myClipboard;
    myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);

    复制数据

    需要做的下一件事就是通过调用ClipData类的数据方法的相应类型来实例化ClipData对象。如果文本数据在newPlainText方法被调用。必须将数据设置为剪贴板管理器对象的剪辑。它的语法如下:

    ClipData myClip;
    String text = "hello world";
    myClip = ClipData.newPlainText("text", text);
    myClipboard.setPrimaryClip(myClip);

    ClipData对象可以采取这三种形式和下面的函数用于创建的那些形式。

    Sr.NoClipData形式与方法
    1 Text
    newPlainText(label, text)
    返回ClipData对象,其单个ClipData.Item对象包含一个文本字符串
    2 URI
    newUri(resolver, label, URI)
    返回ClipData对象,其单ClipData.Item对象包含一个URI
    3 Intent
    newIntent(label, intent)
    返回ClipData对象,其单ClipData.Item对象包含意图

    粘贴数据

    为了粘贴数据,先要通过调用getPrimaryClip()方法拿到剪辑。并从点击就可 ClipData.Item 对象的项目。从对象将得到数据。它的语法如下:

    ClipData abc = myClipboard.getPrimaryClip();
    ClipData.Item item = abc.getItemAt(0);
    String text = item.getText().toString();

    除了这些方法,也有用于管理剪贴板框架提供 ClipboardManager类的其他方法。这些方法如下:

    Sr.No方法及说明
    1 getPrimaryClip()
    这个方法只是返回剪贴板上的当前主片段
    2 getPrimaryClipDescription()
    此方法返回剪贴板上的当前主剪辑的说明,但不是它的数据的一个拷贝
    3 hasPrimaryClip()
    如果当前剪贴板上的主要片段此方法返回true
    4 setPrimaryClip(ClipData clip)
    此方法将剪贴板上的当前主片段
    5 setText(CharSequence text)
    这种方法可直接用于复制文本到剪贴板
    6 getText()
    这种方法可直接用于获取剪贴板复制的文本

    例子

    这里有一个例子演示如何使用ClipboardManager类。它创建了一个基本的复制粘贴应用程序,可让您复制的文本,然后通过剪贴板粘贴。

    为了试验这个例子,可以在实际设备或模拟器运行此程序。

    Steps描述
    1 使用Android Studio创建Android应用程序,并将其命名为:Clipboard 。创建这个项目时确保目标SDK编译在Android SDK中的最新版本或使用更高级别的API。
    2 修改 src/MainActivity.java 文件添加必要的代码
    3 修改res/layout/activity_main.xml 添加相应的XML组件
    4 修改 res/values/string. xml添加必要的字符串组成部分
    5 运行应用程序并选择运行Android的设备,并在其上安装的应用和验证结果

    以下是修改后的主活动文件的内容src/com.yiibai.clipboard/MainActivity.java.

    package com.example.clipboard;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.ClipData;
    import android.content.ClipboardManager;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
       private ClipboardManager myClipboard;
       private ClipData myClip;
       private EditText copyField,pasteField;
       @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
          copyField = (EditText)findViewById(R.id.editText1);
          pasteField = (EditText)findViewById(R.id.editText2);
    
       }
    
       @SuppressLint("NewApi")
       public void copy(View view){
          String text = copyField.getText().toString();
          myClip = ClipData.newPlainText("text", text);
          myClipboard.setPrimaryClip(myClip);
          Toast.makeText(getApplicationContext(), "Text Copied", 
          Toast.LENGTH_SHORT).show();
       }
    
       @SuppressLint("NewApi")
       public void paste(View view){
          ClipData abc = myClipboard.getPrimaryClip();
          ClipData.Item item = abc.getItemAt(0);
          String text = item.getText().toString();
          pasteField.setText(text);
          Toast.makeText(getApplicationContext(), "Text Pasted", 
          Toast.LENGTH_SHORT).show();
       }
    
       @Override
       public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.main, menu);
          return true;
       }
    
    }

    以下是经修改res/layout/activity_main.xml 的内容

    <RelativeLayout 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"
       android:paddingBottom="@dimen/activity_vertical_margin"
       android:paddingLeft="@dimen/activity_horizontal_margin"
       android:paddingRight="@dimen/activity_horizontal_margin"
       android:paddingTop="@dimen/activity_vertical_margin"
       tools:context=".MainActivity" >
    
       <TextView
          android:id="@+id/textView1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentLeft="true"
          android:layout_alignParentTop="true"
          android:layout_marginLeft="25dp"
          android:layout_marginTop="19dp"
          android:text="@string/copytext"
          android:textAppearance="?android:attr/textAppearanceLarge" />
    
       <EditText
          android:id="@+id/editText1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/textView1"
          android:layout_below="@+id/textView1"
          android:layout_marginTop="20dp"
          android:ems="10" >
    
          <requestFocus />
       </EditText>
    
       <TextView
          android:id="@+id/textView2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/editText1"
          android:layout_centerVertical="true"
          android:text="@string/pastetext"
          android:textAppearance="?android:attr/textAppearanceLarge" />
    
       <Button
          android:id="@+id/button1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/editText1"
          android:layout_below="@+id/editText1"
          android:layout_marginLeft="65dp"
          android:layout_marginTop="20dp"
          android:onClick="copy"
          android:text="@string/copy" />
    
       <EditText
          android:id="@+id/editText2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/textView2"
          android:layout_below="@+id/textView2"
          android:layout_marginTop="39dp"
          android:ems="10" />
    
       <Button
          android:id="@+id/button2"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignLeft="@+id/button1"
          android:layout_below="@+id/editText2"
          android:layout_marginTop="34dp"
          android:onClick="paste"
          android:text="@string/paste" />
    
    </RelativeLayout>

    以下是 res/values/string.xml 的内容

     
     
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
       <string name="app_name">Clipboard</string>
       <string name="action_settings">Settings</string>
       <string name="hello_world">Hello world!</string>
       <string name="copy">Copy Text</string>
       <string name="paste">Paste Text</string>
       <string name="copytext">Text to copy</string>
       <string name="pastetext">Copied Text</string>
    </resources>

    以下是 AndroidManifest.xml 文件的内容:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="com.yiibai.clipboard"
       android:versionCode="1"
       android:versionName="1.0" >
    
       <uses-sdk
          android:minSdkVersion="8"
          android:targetSdkVersion="17" />
    
       <application
          android:allowBackup="true"
          android:icon="@drawable/ic_launcher"
          android:label="@string/app_name"
          android:theme="@style/AppTheme" >
          <activity
             android:name="com.yiibai.clipboard.MainActivity"
             android:label="@string/app_name" >
             <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
          </activity>
       </application>
    
    </manifest>

    让我们试着来运行修改剪贴板应用程序。安装AVD并启动程序,如果一切设置和应用程序都没有问题,它会显示以下仿真器窗口:

    Anroid clipboard Tutorial

    现在只是在文本输入任何文字复制字段,然后选择复制文本按钮。下面的通知将显示其显示如下:

    Android Clipboard(复制/剪贴板)

    现在,只要按下按钮,粘贴,会看到它被复制,现在粘贴复制的文本的字段中的文本。它如下所示:

    Android Clipboard(复制/剪贴板)

    以上代码下载:http://pan.baidu.com/s/1kTiiZVh
  • 相关阅读:
    org.apache.catalina.LifecycleException: Protocol handler start failed
    达梦数据库修改表失败 错误号: -6407 错误消息: 锁超时
    mybatis sql语句配置大于号小于号的处理(元素内容必须由格式正确的字符数据或标记组成)
    Unity基础—Transform类
    Naocs 配置中心报错问题
    inux 设置开机自启动 文件配置开机自启动命令
    jar中配置文件读取外面的配置文件
    Unity 制作天空盒
    Maven 剔除已存在jar包
    Maven安装本地jar包到本地仓库
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4809542.html
Copyright © 2020-2023  润新知