狂刷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());    }}

更多相关文章

  1. pandaboard ES学习之旅——5 Android Linux内核源代码下载与编译
  2. windows下载android源代码
  3. android 开发中中,经常用到的代码
  4. android panellistview 圆角实现代码
  5. Android如何在java代码中设置margin
  6. Android Content Provider详解及示例代码
  7. android中eclipse查看源代码
  8. Android开发之android_apk 在线安装(源代码分享)
  9. vlc android 代码编译

随机推荐

  1. Android(安卓)sqlite 基础实例
  2. android 调用camera相关操作
  3. Android(安卓)Application Fundamentals
  4. Android(安卓)optionsmenu例程
  5. android intent uri 传参
  6. Android(安卓)- 判断当前是否使用的是Wif
  7. Android(安卓)下保持屏幕常亮的实现方法
  8. Android(安卓)The style on this compone
  9. Android虚拟sdcard
  10. Android学习之通过content provider获得