狂刷Android范例之2:剪贴板范例ClipboardSample
说明
狂刷Android范例系列文章开张了。每篇学习一个Android范例,将一个范例单独生成一个可运行的app,并对重点源代码进行简要分析。然后提供打包好的源代码下载。
功能
功能很简单,使用Android提供的剪贴板,复制不同类型的数据到剪贴板。
代码包在此,无需下载分:
http://download.csdn.net/detail/logicteamleader/8786187
来源
ClipboardSample例子来自于Android-20的com.example.android.apis.content.ClipboardSample。
环境
代码运行环境:
1.ADT2014版本;
2.android:minSdkVersion=”16”;android:targetSdkVersion=”20”
3.workspace中已经生成了appcompatv7,它的版本是android-22;
代码
注意几个重点的类和方法:剪贴板管理器ClipboardManager,切片数据类ClipData,数组适配器类ArrayAdapter,getSystemService(CLIPBOARD_SERVICE)方法。
其他内容研究代码即可。
/** * Copyright (c) 2010, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.clipboardsample; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.text.method.LinkMovementMethod; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; public class ClipboardSample extends Activity { ClipboardManager mClipboard; Spinner mSpinner; TextView mMimeTypes; TextView mDataText; CharSequence mStyledText; String mPlainText; String mHtmlText; String mHtmlPlainText; ClipboardManager.OnPrimaryClipChangedListener mPrimaryChangeListener = new ClipboardManager.OnPrimaryClipChangedListener() { public void onPrimaryClipChanged() { updateClipData(true); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 通过getSystemService(CLIPBOARD_SERVICE)得到剪切板管理器 mClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); // See res/any/layout/resources.xml for this view layout definition. setContentView(R.layout.clipboard); TextView tv; mStyledText = getText(R.string.styled_text); 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); //这三行代码创建了一个Spinner使用的经典ArrayAdapter,其中用到了资源文件R.array.clip_data_types 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); mSpinner.setOnItemSelectedListener( new OnItemSelectedListener() { public void onItemSelected( AdapterView<?> parent, View view, int position, long id) { updateClipData(false); } public void onNothingSelected(AdapterView<?> parent) { } }); mMimeTypes = (TextView)findViewById(R.id.clip_mime_types); mDataText = (TextView)findViewById(R.id.clip_text); mClipboard.addPrimaryClipChangedListener(mPrimaryChangeListener); updateClipData(true); } @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 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"); } 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: mDataText.setText(item.getIntent().toUri(0)); break; case 4: mDataText.setText(item.getUri().toString()); break; case 5: mDataText.setText(item.coerceToText(this)); break; case 6: mDataText.setText(item.coerceToStyledText(this)); break; case 7: mDataText.setText(item.coerceToHtmlText(this)); break; default: mDataText.setText("Unknown option: " + mSpinner.getSelectedItemPosition()); break; } } else { mDataText.setText("(NULL clip)"); } mDataText.setMovementMethod(LinkMovementMethod.getInstance()); } }