安卓官方API DEMO之剪貼簿Clipboard
阿新 • • 發佈:2019-02-19
/**
* Android系統剪貼簿功能DEMO
*
* @description:
* @author ldm
* @date 2016-5-16 下午3:15:47
*/
public class ClipboardSample extends Activity {
// 系統剪貼簿管理器
ClipboardManager mClipboard;
// 下拉列表
Spinner mSpinner;
TextView mMimeTypes;
TextView mDataText;
CharSequence mStyledText;
String mPlainText;
String mHtmlText;
String mHtmlPlainText;
TextView tv;
// 剪下板內容變化的監聽器
ClipboardManager.OnPrimaryClipChangedListener mPrimaryChangeListener = new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
updateClipData(true);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.clipboard);
// 系統剪貼簿管理器
mClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
mStyledText = getText(R.string.styled_text);
// 初始化介面UI
initViews();
// 設定資料及控制元件監聽
initDataAndEvents();
}
private void initDataAndEvents() {
// <string-array name="clip_data_types">
// <item>No data in clipboard</item>
// <item>Text clip</item>
// <item>HTML Text clip</item>
// <item>Intent clip</item>
// <item>Uri clip</item>
// <item>Coerce to text</item>
// <item>Coerce to styled text</item>
// <item>Coerce to HTML text</item>
// </string-array>
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.clip_data_types,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
// Spinner下拉框Item點選事件處理
mSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
updateClipData(false);
}
public void onNothingSelected(AdapterView<?> parent) {
}
});
mClipboard.addPrimaryClipChangedListener(mPrimaryChangeListener);
updateClipData(true);
}
private void initViews() {
tv = (TextView) findViewById(R.id.styled_text);
tv.setText(mStyledText);
mPlainText = mStyledText.toString();
tv = (TextView) findViewById(R.id.plain_text);
tv.setText(mPlainText);
mHtmlText = "<b>Link:</b> <a href=\"http://www.android.com\">Android</a>";
mHtmlPlainText = "Link: http://www.android.com";
tv = (TextView) findViewById(R.id.html_text);
tv.setText(mHtmlText);
mSpinner = (Spinner) findViewById(R.id.clip_type);
mMimeTypes = (TextView) findViewById(R.id.clip_mime_types);
mDataText = (TextView) findViewById(R.id.clip_text);
}
@Override
protected void onDestroy() {
super.onDestroy();
mClipboard.removePrimaryClipChangedListener(mPrimaryChangeListener);
}
public void pasteStyledText(View button) {
mClipboard.setPrimaryClip(ClipData.newPlainText("Styled Text",
mStyledText));
}
public void pastePlainText(View button) {
mClipboard.setPrimaryClip(ClipData.newPlainText("Styled Text",
mPlainText));
}
public void pasteHtmlText(View button) {
mClipboard.setPrimaryClip(ClipData.newHtmlText("HTML Text",
mHtmlPlainText, mHtmlText));
}
public void pasteIntent(View button) {
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.android.com/"));
mClipboard.setPrimaryClip(ClipData.newIntent("VIEW intent", intent));
}
public void pasteUri(View button) {
mClipboard.setPrimaryClip(ClipData.newRawUri("URI",
Uri.parse("http://www.android.com/")));
}
/**
* 更新剪貼簿操作
* */
void updateClipData(boolean updateType) {
// 獲取剪下板的ClipData資料物件
ClipData clip = mClipboard.getPrimaryClip();
// 獲取到資料的型別
String[] mimeTypes = clip != null ? clip.getDescription()
.filterMimeTypes("*/*") : null;
if (mimeTypes != null) {
mMimeTypes.setText("");
for (int i = 0; i < mimeTypes.length; i++) {
if (i > 0) {
mMimeTypes.append("\n");
}
mMimeTypes.append(mimeTypes[i]);
}
} else {
mMimeTypes.setText("NULL");
}
// 根據型別來確定Spinner顯示的文字
if (updateType) {
if (clip != null) {
ClipData.Item item = clip.getItemAt(0);
if (item.getHtmlText() != null) {
mSpinner.setSelection(2);
} else if (item.getText() != null) {
mSpinner.setSelection(1);
} else if (item.getIntent() != null) {
mSpinner.setSelection(3);
} else if (item.getUri() != null) {
mSpinner.setSelection(4);
} else {
mSpinner.setSelection(0);
}
} else {
mSpinner.setSelection(0);
}
}
if (clip != null) {
// 獲取剪貼簿中的資料
ClipData.Item item = clip.getItemAt(0);
switch (mSpinner.getSelectedItemPosition()) {
case 0:
mDataText.setText("(No data)");
break;
case 1:
mDataText.setText(item.getText());
break;
case 2:
mDataText.setText(item.getHtmlText());
break;
case 3:
// 因沒有intent型別資料,會報null
mDataText.setText(item.getIntent().toUri(0));
break;
case 4:
// 因沒有Uri型別資料,會報null
mDataText.setText(item.getUri().toString());
break;
case 5:
// 剪貼簿中的非text資料可以通過ClipData.Item.coerceToText()方法轉換為text處理。
mDataText.setText(item.coerceToText(this));
break;
case 6:
mDataText.setText(item.coerceToStyledText(this));
break;
case 7:
// 轉換為Hteml格式
mDataText.setText(item.coerceToHtmlText(this));
break;
default:
mDataText.setText("Unknown option: "
+ mSpinner.getSelectedItemPosition());
break;
}
} else {
mDataText.setText("(NULL clip)");
}
// 設定文字監聽
mDataText.setMovementMethod(LinkMovementMethod.getInstance());
}
}
佈局檔案:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/copy_styled_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="pasteStyledText"
android:text="@string/copy_text" />
<TextView
android:id="@+id/styled_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="normal" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/copy_plain_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="pastePlainText"
android:text="@string/copy_text" />
<TextView
android:id="@+id/plain_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="normal" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/copy_html_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="pasteHtmlText"
android:text="@string/copy_text" />
<TextView
android:id="@+id/html_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="normal" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/copy_intent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="pasteIntent"
android:text="@string/copy_intent" />
<Button
android:id="@+id/copy_uri"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="pasteUri"
android:text="@string/copy_uri" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data type: "
android:textAppearance="?android:attr/textAppearanceMedium" />
<Spinner
android:id="@+id/clip_type"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:prompt="@string/clip_type_prompt" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="MIME types: " />
<TextView
android:id="@+id/clip_mime_types"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:background="#ff303030"
android:padding="4dp"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Data content:" />
<TextView
android:id="@+id/clip_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ff303030"
android:padding="4dp"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
</LinearLayout>
</ScrollView>