ApiDemos学习知识点Content-ClipBoard(3)

xiaoxiao2021-02-28  120

首先看一下Content功能类下的列表截图

再看一下Content-ClipBoard的运行界面截图

接下来看一下代码和知识点

ClipBoard的Activity主要讲了剪贴板的基本用法,复制和粘贴

使用流程:  * (1).获取剪贴板管理器:ClipboardManager mClipboardManager = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);  * (2).创建能够存入剪贴板的ClipData对象(ClipData对象中包含一个或多个ClipData.Item对象):  * A. 创建普通字符型ClipData:ClipData mClipData =  ClipData.newPlainText(“Label”, “Content”);  * B. 创建URL型ClipData:ClipData.newRawUri(“Label”, Uri.parse(“http://www.fishme.cn/“));  * C. 创建Intent型ClipData:ClipData.newIntent(“Label”, intent);  * 需要注意的是:上面三种方法只在ClipData对象中创建了一个ClipData.Item对象,  * 如果想向ClipData对象中添加多个Item应该通过ClipData对象的addItem()方法添加。  * (3)将ClipData数据复制到剪贴板:ClipboardManager.setPrimaryClip(ClipData对象);  * (4)从剪贴板中获取ClipData数据:ClipboardManager.getPrimaryClip();  * (5)解析ClipData中的数据 

下面看一下实际的demo中的布局和代码

<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:textAppearance="?android:attr/textAppearanceMedium" android:text="Data type: " /> <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> public class ClipboardSample extends Activity { ClipboardManager mClipboard; Spinner mSpinner; TextView mMimeTypes; TextView mDataText; //注意一定要把styleText(带格式的文本)定义成CharSequence,而不能定义为String 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); mClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); // See res/any/layout/resources.xml for this view layout definition. setContentView(R.layout.clipboard); TextView tv; // 在这里必须要用getText方法,而不能用getString方法,否则得不到带格式的文本,而且还会报错。 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); 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); }  // 根据内容的不同类型构造ClipData数据,并将其复制到剪贴板 public void pasteStyledText(View button) { mClipboard.setPrimaryClip(ClipData.newPlainText("Styled Text", mStyledText)); } public void pastePlainText(View button) { mClipboard.setPrimaryClip(ClipData.newPlainText("Styled Text", mPlainText)); } // 第二个参数表时当html只作为普通文本,不处理连接请求时的值 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/"))); }  /**      * 更新剪贴板数据      *       * @param updateTypes      *            :控制下拉列表框是否更新选中的条目      */ void updateClipData(boolean updateType) {  // 从剪贴板中取出ClipData数据 ClipData clip = mClipboard.getPrimaryClip(); // 取出与当前设定的Mimetypes匹配的ClipData中的所有数据类型,*/*表示任意的类型,即取出当前ClipData中所有的数据类型 String[] mimeTypes = clip != null ? clip.getDescription().filterMimeTypes("*/*") : null; if (mimeTypes != null) { mMimeTypes.setText(""); for (int i=0; i<mimeTypes.length; i++) { if (i > 0) { // 因为一个ClipData中可以有多个Item,每个条目的数据类型也不一定相同                     // 如果有多个数据类型,则在每个数据类型后插入换行 需要注意的是在本例中只有一个Item mMimeTypes.append("\n"); } mMimeTypes.append(mimeTypes[i]); } } else { mMimeTypes.setText("NULL"); } // 是否更新下拉列表中的选中条目 if (updateType) { if (clip != null) { ClipData.Item item = clip.getItemAt(0); // 如果剪贴板中的数据是普通文本则将下拉列表的条一项设置为选中                 //这里需要注意的是必须先判断item.getHtmlText()因为如果先判断item.getText()                 //的话当我们点击Copy Text按钮复制htmlText文本时就会执行getText方法得到                 //PlainHtmlText,这不是我们想要的结果 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()); } }

转载请注明原文地址: https://www.6miu.com/read-27399.html

最新回复(0)