2011-10-22

在 Android 使用程式呼叫剪貼簿

如何在 Android 機器上使用剪貼簿?對於沒經驗又沒看過文件(裡面應該有寫吧)真是難摸索啊。

原來是在文字編輯框裡「長按」就可以了,剪貼簿裡沒東西就會提示選取,有東西就會提示貼上,如果選取後再「長按」一次就會提示複製或剪下。

那在程式裡怎麼使用剪貼簿呢?主角就是 ClipboardManager,主要 API 為 hasText()、getText() 和 setText()。
練習範例:
按下 ABC 就會分別將 ABC 寫到(append)剪貼簿裡,再將彙整結果寫到文字編輯框裡。

UI 設定檔:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
    <LinearLayout 
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      >
        <Button
            android:id="@+id/tvABtn"
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content"
          android:text="A" 
          />
        <Button
            android:id="@+id/tvBBtn"
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content"
          android:text="B" 
          />
        <Button
            android:id="@+id/tvCBtn"
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content"
          android:text="C" 
          />
        <Button
            android:id="@+id/tvClearBtn"
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content"
          android:text="Clear" 
          />
    </LinearLayout>
    <EditText
        android:id="@+id/edit"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      />
</LinearLayout>
Activity 程式:
public class ClipboardActivity extends Activity implements OnClickListener {

 private ClipboardManager cbMgr;
 private static final String TAG = "ClipboardActivity";

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  this.cbMgr = (ClipboardManager) this.getSystemService(CLIPBOARD_SERVICE);
  ((Button) this.findViewById(R.id.tvABtn)).setOnClickListener(this);
  ((Button) this.findViewById(R.id.tvBBtn)).setOnClickListener(this);
  ((Button) this.findViewById(R.id.tvCBtn)).setOnClickListener(this);
  ((Button) this.findViewById(R.id.tvClearBtn)).setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
  EditText edit = (EditText) this.findViewById(R.id.edit);
  if (v.getId() == R.id.tvClearBtn) {
   this.cbMgr.setText("");
   edit.setText("");
  }
  else {
   CharSequence txt = null;
   if (v.getId() == R.id.tvABtn || v.getId() == R.id.tvBBtn
     || v.getId() == R.id.tvCBtn) {
    txt = ((Button) v).getText();
   }
   Log.d(TAG, (String) txt);
   if (this.cbMgr.hasText()) { // 剪貼簿中有無字串
    txt = this.cbMgr.getText() + " " + txt; // 取得剪貼簿中的字串
   }
   this.cbMgr.setText(txt); // 設定剪貼簿中的字串
   edit.setText(txt);
   Log.d(TAG, (String) txt);
  }
 }
}

沒有留言:

張貼留言