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.
Trong khóa học android này , mình sẽ hướng dẫn các bạn sử dụng 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 thuyết minh 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à thuyết minh đố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 đó:

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

Để 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:

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);   } }
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.



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:

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:

0 nhận xét:

Đăng nhận xét

 
Top