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

首先看一下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());
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值