Clipboard trong Android



Android cung cấp Clipboard Framework để sao chép và dán các kiểu dữ liệu khác nhau. Dữ liệu có thể là text, image, stream data, hoặc các kiểu dữ liệu phức tạp khác.

Android cung cấp thư việc của ClipboardManager, ClipData và ClipData.Item để sử dụng cho framework sao chép và dán. Để sử dụng Clipboard Framework, bạn cần đặt dữ liệu vào trong đối tượng Clip, và sau đó đặt đối tượng đó vào trong Clipboard của hệ thống.

Để sử dụng Clipboard, bạn cần khởi tạo một đối tượng của ClipboardManager bằng việc gọi phương thức getSystemService(). Cú pháp như sau:−

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

Sao chép dữ liệu

Việc bạn cần làm tiếp theo là khởi tạo đối tượng ClipData bởi việc gọi phương thức kiểu dữ liệu tương ứng của lớp ClipData. Trong trường hợp là dữ liệu text, bạn gọi phương thức newPlainText. Sau đó, bạn phải thiết lập dữ liệu đó như là clip của đối tượng ClipboardManager. Cú pháp là: −

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

Đối tượng ClipData có thể nhận ba dạng sau và các hàm sau đây được sử dụng để tạo các dạng đó:

Stt ClipData Form & Method
1 Text

newPlainText(label, text)

Trả về một đối tượng ClipData mà có đối tượng ClipData.Item chứa một text string

2 URI

newUri(resolver, label, URI)

Trả về một đối tượng ClipData mà có đối tượng ClipData.Item chứa một URI

3 Intent

newIntent(label, intent)

Trả về một đối tượng ClipData mà có đối tượng ClipData.Item chứa một Intent

Dán dữ liệu

Quảng cáo

Để dán dữ liệu, đầu tiên chúng ta cần lấy Clip bằng cách gọi phương thức getPrimaryClip(). Và từ đó, chúng ta sẽ lấy item trong đối tượng ClipData.Item. Và từ đối tượng đó chúng ta sẽ lấy dữ liệu. Cú pháp là: −

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

Ngoài các phương thức này, lớp ClipboardManager cũng cung cấp một số phương thức khác để quản lý Clipboard Framework. Bảng dưới liệt kê các phương thức này: −

Stt Phương thức & Miêu tả
1 getPrimaryClip()

Phương thức này trả về Primary Clip hiện tại trên Clipboard

2 getPrimaryClipDescription()

Phương thức này trả về một miêu tả của Primary Clip trên Clipboard mà không là một bản sao dữ liệu của nó

3 hasPrimaryClip()

Phương thức này trả về true nếu có một Primary Clip trên Clipboard

4 setPrimaryClip(ClipData clip)

Phương thức này thiết lập Primary Clip trên Clipboard

5 setText(CharSequence text)

Phương thức này có thể trực tiếp được sử dụng để sao chép text vào trong Clipboard

6 getText()

Phương thức này có thể trực tiếp được sử dụng để lấy text đã được sao từ Clipboard

Ví dụ

Ví dụ sau minh họa sự sử dụng của lớp ClipboardManager. Nó tạo một ứng dụng sao chép và dán cơ bản cho phép bạn sao text và sau đó dán nó thông qua Clipboard.

Để thử nghiệm ví dụ này, bạn có thể chạy trên một thiết bị thực sự hoặc trong một Emulator.

Sau đây là nội dung của Main Activity file đã được sửa đổi: src/MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;

import android.os.BatteryManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Set;


public class MainActivity extends ActionBarActivity {
   EditText ed1,ed2;
   Button b1,b2;
   
   private ClipboardManager myClipboard;
   private ClipData myClip;.
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      ed1=(EditText)findViewById(R.id.editText);
      ed2=(EditText)findViewById(R.id.editText2);
      
      b1=(Button)findViewById(R.id.button);
      b2=(Button)findViewById(R.id.button2);
      
      myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
      
      b1.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            String text;
            text = ed1.getText().toString();
            
            myClip = ClipData.newPlainText("text", text);
            myClipboard.setPrimaryClip(myClip);
            
            Toast.makeText(getApplicationContext(), "Text Copied",Toast.LENGTH_SHORT).show();
         }
      });
      
      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            ClipData abc = myClipboard.getPrimaryClip();
            ClipData.Item item = abc.getItemAt(0);
            
            String text = item.getText().toString();
            ed2.setText(text);
            
            Toast.makeText(getApplicationContext(), "Text Pasted",Toast.LENGTH_SHORT).show();
         }
      });
   }
   
   @Override
   protected void onDestroy() {
      super.onDestroy();
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}
Quảng cáo

Bạn sửa đổi nội dung của 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:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">
   
   <TextView android:text="Example" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:hint="Copy text"
      android:layout_below="@+id/imageView"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_alignLeft="@+id/editText"
      android:layout_alignStart="@+id/editText"
      android:hint="paste text"
      android:layout_below="@+id/editText"
      android:layout_alignRight="@+id/editText"
      android:layout_alignEnd="@+id/editText" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Copy text"
      android:id="@+id/button"
      android:layout_below="@+id/editText2"
      android:layout_alignLeft="@+id/editText2"
      android:layout_alignStart="@+id/editText2" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Paste text"
      android:id="@+id/button2"
      android:layout_below="@+id/editText2"
      android:layout_alignRight="@+id/editText2"
      android:layout_alignEnd="@+id/editText2" />
      
</RelativeLayout>

Và đây là nội dung của res/values/string.xml.

<resources>
   <string name="app_name">My Application</string>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</string>
</resources>

Tiếp theo là nội dung của AndroidManifest.xml file.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.clipboard"
   android:versionCode="1"
   android:versionName="1.0" >

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplication.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>

Cuối cùng, bạn chạy ứng dụng Android vừa sửa đổi ở trên.

clipboard trong Android

Bây giờ nhập bất cứ text nào vào trong trường Copy Text và sau đó chọn nút COPY TEXT. Thông báo sau sẽ được hiển thị như sau: −

clipboard trong Android

Bây giờ nhấn nút PASTE, và bạn sẽ thấy text đã được sao chép bây giờ được dán trong trường PASTE TEXT. Như sau: −

clipboard trong Android

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.




Tài liệu giáo viên