狂刷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. Android:控件GridView的使用
  2. android 自定义SeekBar
  3. Android(安卓)TextView中显示单行过长的用...代替
  4. Android(安卓)给贪吃蛇游戏加背景音乐
  5. Android疑惑记录-----在Adapter中配置按钮监听器时,列表项内容获
  6. android屏幕自适应4方法案例整合
  7. pandaboard ES学习之旅——5 Android(安卓)Linux内核源代码下载
  8. Android(安卓)Dialog无法去除遮罩
  9. Android(安卓)NDK学习(1) 简介

随机推荐

  1. android 判断是否连接钢琴和检测钢琴是哪
  2. Android 文件下载与解压缩
  3. Android 仿微信支付密码界面
  4. Android 定时获取系统内存信息
  5. Android OEM 厂商提供的 USB驱动
  6. Android 采用Pull解析XML内容 【学习记录
  7. Android 仿苹果底部弹出Dialog
  8. Android 之欢迎界面Splash
  9. android分享应用工具类
  10. Android 实现Activity后台运行