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ượ
Trang 1Clipboard 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
newPlainText(label, text)
Trả về một đối tượng ClipData mà có đối tượng ClipData.Item chứa một text string
newUri(resolver, label, URI)
Trang 2Trả về một đối tượng ClipData mà có đối tượng ClipData.Item chứa một URI
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
Để 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ả
Phương thức này trả về Primary Clip hiện tại trên Clipboard
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ó
Phương thức này trả về true nếu có một Primary Clip trên Clipboard
Phương thức này thiết lập Primary Clip trên Clipboard
Trang 3Phương thức này có thể trực tiếp được sử dụng để sao chép text vào trong Clipboard
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 =
Trang 4item.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); } }
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"
Trang 5android: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
Trang 7Bâ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: −
Trang 9Bâ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: −