[Android 教程]TextView 常用功能讲解


Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 [Android 教程]TextView 常用功能讲解 我的博客:萝卜白菜的博客|http://orgcent.com 我的 QQ:397214807 Android 技术互助 QQ 群:104042731 群简介: 人少不一定不好,重要的是有人能解决你的问题。这远比活跃在无法解决问题的地方要 好的多。 你帮助我,我帮助你,大家一起帮助自己。 遇到困难,你不在孤单。 本教程主要是帮助 Android 开发学习者尽快入门,以最快的时间掌握基本的 Android 开发知识。内容主要是针对每个控件的常用功能、系统一些常用 API(如网络、电话、媒体、 地图等)进行讲解。这些功能大部分在平时的项目中都会使用到,希望能够帮助您解决疑难 困惑。如果您觉得这些基础知识没有必要,您大可没有必要把时间浪费在这里。每个人的时 间每天都只有 24 小时,都一样的宝贵。 Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 TextView 使用 SpannableString 设置复合文本 原文地址:http://orgcent.com/android-textview-spannablestring-span/ TextView 通常用来显示普通文本,但是有时候需要对其中某些文本进行样式、事件方面的 设置。Android 系统通过 SpannableString 类来对指定文本进行相关处理,具体有以下功能: 1、BackgroundColorSpan 背景色 2、ClickableSpan 文本可点击,有点击事件 3、ForegroundColorSpan 文本颜色(前景色) 4、MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter) 5、MetricAffectingSpan 父类,一般不用 6、RasterizerSpan 光栅效果 7、StrikethroughSpan 删除线(中划线) 8、SuggestionSpan 相当于占位符,一般用在 EditText 输入框中。当双击此文本时,会弹 出提示框选择一些建议(推荐的)文字,选中的文本将替换此占位符。在输入法上用的较多。 9、UnderlineSpan 下划线 10、AbsoluteSizeSpan 绝对大小(文本字体) 11、DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。 12、ImageSpan 图片 13、RelativeSizeSpan 相对大小(文本字体) 14、ReplacementSpan 父类,一般不用 15、ScaleXSpan 基于 x 轴缩放 16、StyleSpan 字体样式:粗体、斜体等 17、SubscriptSpan 下标(数学公式会用到) 18、SuperscriptSpan 上标(数学公式会用到) 19、TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色) 20、TypefaceSpan 文本字体 21、URLSpan 文本超链接 这么多文字,为了让你有看下去的勇气,下面来张效果图: Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 1、BackgroundColorSpan 背景色 SpannableString spanText = new SpannableString("萝卜白菜的博客 -- http://orgcent.com"); spanText.setSpan(new BackgroundColorSpan(Color.GREEN), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); 2、ClickableSpan 文本可点击,有点击事件 查看:http://orgcent.com/android-textview-no-underline-hyperlink/ Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 3、ForegroundColorSpan 文本颜色(前景色) spanText = new SpannableString("萝卜白菜的博客 -- http://orgcent.com"); spanText.setSpan(new ForegroundColorSpan(Color.BLUE), 6, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); 4、MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter) spanText = new SpannableString("MaskFilterSpan -- http://orgcent.com"); int length = spanText.length(); //模糊(BlurMaskFilter) MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, Blur.OUTER)); spanText.setSpan(maskFilterSpan, 0, length - 10, Spannable. SPAN_INCLUSIVE_EXCLUSIVE); //浮雕(EmbossMaskFilter) maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3)); spanText.setSpan(maskFilterSpan, length - 10, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); PS:从上图看,浮雕效果不明显。把字体设置大点后可以看得清晰些。需要其他效果可以继承 MaskFilter 来自定义。 6、RasterizerSpan 光栅效果 spanText = new SpannableString("StrikethroughSpan"); spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable. SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); PS:暂不清楚,效果不明显。 7、StrikethroughSpan 删除线(中划线) Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 spanText = new SpannableString("StrikethroughSpan"); spanText.setSpan(new StrikethroughSpan(), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); 8、SuggestionSpan 相当于占位符,一般用在 EditText 输入框中。当双击此文本时,会弹出提示框选择一些建议 (推荐的)文字,选中的文本将替换此占位符。在输入法上用的较多。 PS:API 14 新增,暂无示例。 9、UnderlineSpan 下划线 spanText = new SpannableString("UnderlineSpan"); spanText.setSpan(new UnderlineSpan(), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); 10、AbsoluteSizeSpan 绝对大小(文本字体) spanText = new SpannableString("AbsoluteSizeSpan"); spanText.setSpan(new AbsoluteSizeSpan(20, true), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); PS:把字体大小设置大点,效果硬朗。 11、DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。 DynamicDrawableSpan drawableSpan = new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) { @Override public Drawable getDrawable() { Drawable d = getResources(). getDrawable(R.drawable.ic_launcher); d.setBounds(0, 0, 50, 50); return d; } }; Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 DynamicDrawableSpan drawableSpan2 = new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BOTTOM) { @Override public Drawable getDrawable() { Drawable d = getResources(). getDrawable(R.drawable.ic_launcher); d.setBounds(0, 0, 50, 50); return d; } }; spanText.setSpan(drawableSpan, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spanText.setSpan(drawableSpan2, 7, 8, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); PS:左边图片基于基线对齐,右边图片基于底部对齐 12、ImageSpan 图片 spanText = new SpannableString("ImageSpan"); Drawable d = getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0, 0, 50, 50); spanText.setSpan(new ImageSpan(d), 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); PS:和 DynamicDrawableSpan 差别不大 13、RelativeSizeSpan 相对大小(文本字体) spanText = new SpannableString("RelativeSizeSpan"); //参数proportion:比例大小 spanText.setSpan(new RelativeSizeSpan(2.5f), 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); PS:相对大小的比例是基于当前文本字体大小 15、ScaleXSpan 基于 x 轴缩放 Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 spanText = new SpannableString("ScaleXSpan -- 萝卜白菜的博客"); //参数proportion:比例大小 spanText.setSpan(new ScaleXSpan(3.8f), 3, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); 16、StyleSpan 字体样式:粗体、斜体等 spanText = new SpannableString("StyleSpan -- 萝卜白菜的博客"); //Typeface.BOLD_ITALIC:粗体+斜体 spanText.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 3, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); 17、SubscriptSpan 下标(数学公式会用到) spanText = new SpannableString("SubscriptSpan -- 萝卜白菜的博客"); spanText.setSpan(new SubscriptSpan(), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); 18、SuperscriptSpan 上标(数学公式会用到) spanText = new SpannableString("SuperscriptSpan -- 萝卜白菜的博客"); spanText.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); 19、TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色) spanText = new SpannableString("TextAppearanceSpan -- 萝卜白菜的博客"); //若需自定义TextAppearance,可以在系统样式上进行修改 Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 spanText.setSpan(new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); PS:系统还提供了相关值 TextAppearance_Small, TextAppearance_Large 等。如有需 要可在以上样式基础上修改。 20、TypefaceSpan 文本字体 spanText = new SpannableString("TypefaceSpan -- 萝卜白菜的博客"); //若需使用自定义字体,可能要重写类TypefaceSpan spanText.setSpan(new TypefaceSpan("monospace"), 3, 10, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); PS:关于自定义字体的设置,后面将介绍如何使用 21、URLSpan 文本超链接 spanText = new SpannableString("URLSpan -- 萝卜白菜的博客"); spanText.setSpan(new URLSpan("http://orgcent.com"), 10, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); //让URLSpan可以点击 mTVText.setMovementMethod(new LinkMovementMethod()); PS: 1、LinkMovementMethod 是继承了 ScrollingMovementMethod 类,这个类用来实现 TextView 在没有使用标签也可以实现滚动效果。具体查看: http://orgcent.com/android-vertical-horizontal-scroll-textview/ 2、若想实现无下划线的超链接,查看 http://orgcent.com/android-textview-no-underline-hyperlink/ Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 TextView 自动识别文本超链接 TextView 默认不识别超链接,可以通过设置 android:autoLink=”all”,具体请参考以下文 章: 1、Android 使用 TextView 实现无下划线超链接 http://orgcent.com/android-textview-no-underline-hyperlink/ 2、android:TextView 设置文本样式和超链接 http://orgcent.com/android-textview-style-hyperlink/ Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 Android 自定义 view-文本自动换行 原文地址:http://orgcent.com/android-custom-view-text-wrap/ TextView 的文本自动换行显示对中文汉字方面有些问题,经常会在句尾有一些空白。为了 解决这个问题,便尝试性的通过自定义 View 来实现文本自动换行效果。 PS:TextView 的文本布局是通过 Layout 类来实现。它有 StaticLayout 和 DynamicLayout 两个子类,应该可以使用这些类或者自定义 Layout 来实现文本换行。下面的这个方法比较 原始。 文本自动换行原理:文本超出控件宽度后,自动换到下一行绘制。 核心代码如下: protected void onDraw(Canvas canvas) { FontMetrics fm = mPaint.getFontMetrics(); float baseline = fm.descent - fm.ascent; float x = 0; float y = baseline; //由于系统基于字体的底部来绘制文本,所有需要加上字 体的高度。 String txt = getResources().getString(com.orgcent.demo.R.string.hello); //文本自动换行 String[] texts = autoSplit(txt, mPaint, getWidth() - 5); System.out.printf("line indexs: %s\n", Arrays.toString(texts)); for(String text : texts) { canvas.drawText(text, x, y, mPaint); //坐标以控件左上角为原点 y += baseline + fm.leading; //添加字体行间距 } } private String[] autoSplit(String content, Paint p, float width) { int length = content.length(); float textWidth = p.measureText(content); if(textWidth < = width) { return new String[]{content}; } int start = 0, end = 1, i = 0; Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 int lines = (int) Math.ceil(textWidth / width); //计算行数 String[] lineTexts = new String[lines]; while(start < length) { if(p.measureText(content, start, end) > width) { //文本宽度超 出控件宽度时 lineTexts[i++] = (String) content.subSequence(start, end); start = end; } if(end == length) { //不足一行的文本 lineTexts[i] = (String) content.subSequence(start, end); break; } end += 1; } return lineTexts; } Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 TextView 文本居中(android:gravity/layout_gravity) 原文地址:http://orgcent.com/android-textview-layout_gravity-center/ TextView 要让文本居中显示,有两种情况需要考虑: 1、layout_width/layout_height 为 wrap_content,此时要让 TextView 在父控件上居中显 示,必须设置 layout_gravity=”center”。 2、layout_width/layout_height 为 fill_parent,此时由于 TextView 已占据父窗体所有空 间,必须设置 gravity=”center”。 PS:android:gravity 用来设置 TextView 的内容对齐方式,android:layout_gravity 用来设 置 TextView 在父窗体中的对齐方式。 Java 代码设置如下: mTVText.setGravity(Gravity.CENTER); //左上角设置为: Gravity.LEFT|Gravity.TOP //LinearLayout居中 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; //设置TextView在LinearLayout上的外边距(此处为距父窗体四周5个像素),建议单位使用 dp,关于单位转换在下面说明 params.setMargins(5, 5, 5, 5); //RelativeLayout居中 RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params2.addRule(RelativeLayout.CENTER_VERTICAL); PS:上面说了 LinearLayout 和 RelativeLayout 两种对齐方式的设置方法,其他布局类大 都类似将不做介绍。在 XML 布局文件中配置居中对齐方式可以使用 android:gravity 或 android:layout_gravity 属性。了解 Android 单位转换,可查看文章 http://orgcent.com/android-dpsppx-unit-conversion/ Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 TextView 显示 Html 类解析的网页和图片及自定义标签 原文地址:http://orgcent.com/android-textview-parse-html-image-tag/ Android 系统显示 HTML 网页的最佳控件为 WebView,有时候为了满足特定需求,需要在 TextView 中显示 HTML 网页、图片及解析自定义标签。 1、TextView 显示 Html 类解析的网页 CharSequence richText = Html.fromHtml("萝卜白菜的博客 --http://orgcent.com"); mTVText.setText(richText); //此行必须,否则超链接无法点击,ScrollingMovementMethod实现滚动条 mTVText.setMovementMethod(LinkMovementMethod.getInstance()); PS: 如果想同时让内容可滚动和超链接可点击,只要设置 LinkMovementMethod 即可。因为 其继承了 ScrollingMovementMethod。关于 ScrollingMovementMethod 说明,可查看 http://orgcent.com/android-vertical-horizontal-scroll-textview/ 2、TextView 显示 Html 解析的图片和自定义标签 final String html = "萝卜白菜的博客自定义"; //处理未知标签,通常是系统默认不能处理的标签 final Html.TagHandler tagHandler = new Html.TagHandler() { int contentIndex = 0; /** * opening : 是否为开始标签 * tag: 标签名称 * output:输出信息,用来保存处理后的信息 * xmlReader: 读取当前标签的信息,如属性等 */ public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { if("mytag".equals(tag)) { if(opening) {//获取当前标签的内容开始位置 contentIndex = output.length(); try { final String color = (String) Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 xmlReader.getProperty("color"); } catch (Exception e) { e.printStackTrace(); } } else { final int length = output.length(); String content = output.subSequence(contentIndex, length).toString(); SpannableString spanStr = new SpannableString(content); spanStr.setSpan(new ForegroundColorSpan(Color.GREEN), 0, content.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); output.replace(contentIndex, length, spanStr); } } System.out.println("opening:" + opening + ",tag:" + tag + ",output:" + output); }}; //解析图片 final Html.ImageGetter imageGetter = new Html.ImageGetter() { public Drawable getDrawable(String source) { //在此必须异步加载图片 Drawable d = null; try { InputStream is = new DefaultHttpClient().execute(new HttpGet(source)).getEntity().getContent(); Bitmap bm = BitmapFactory.decodeStream(is); d = new BitmapDrawable(bm); //setBounds(0, 0, bm.getWidth(), bm.getHeight()); d.setBounds(0, 0, 200, 300); } catch (Exception e) {e.printStackTrace();} return d; } }; richText = Html.fromHtml(html, imageGetter, tagHandler); mTVText.setText(richText); Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 TextView 设置自定义字体和背景边框 原文地址:http://orgcent.com/android-textview-typeface-background-border/ TextView 设置文本字体有 XML 和 Java 代码两种方式。XML 代码通常只能设置系统默认提供 的几种字体如normal,sans,serif, monospace,Java代码则可以设置第三方字体如宋体等。 1、XML 代码方式 2、Java 代码方式 mTVText.setText("自定义字体"); final Typeface tf = Typeface.createFromAsset(getAssets(), "simsun.jpg"); mTVText.setTypeface(tf, Typeface.ITALIC); PS: 由于字体文件大于 1M,将其扩展名改为 jpg 即可,具体查看文章 http://orgcent.com/android-assets-raw-size-limit/ TextView 要实现背景边框效果,背景图片必须是有边框的。 1、背景边框图片 XML 代码(drawable/bg_border.xml) 2、TextView 设置背景的代码 Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 EditText 使用 Selection 类选择(全选)文本和光标位置 原文地址: http://orgcent.com/android-edittext-selection-cursor/ EditText 继承于 TextView 类,是 Android 系统中的文本输入框。系统使用 Selection 类来 对 EditText 的内容进行选择指定文本、全选等操作,同时可以设置光标显示位置和显示出 指定位置的文本。 1、EditText 选择部分文本和全选 EditText etSelection = (EditText) findViewById(R.id.etSelection); etSelection.setText("测试绚丽斯蒂芬森就连手机发送旅客附近"); //BufferType.EDITABLE必须添加否则getEditableText()为null,Selection报 NullPointerException //etSelection.setSelection(0, 3); //此方法等同于下面Selection类的方法 Selection.setSelection(etSelection.getEditableText(), 0, 3); //全选 etSelection.selectAll(); PS: 选中指定文字,textview 好像没有效果,需要自定义。 2、EditText 设置光标位置及显示出指定位置的文本 //设置光标位置 etSelection.setSelection(etSelection.length() - 1); //Selection.setSelection(etSelection.getEditableText(), 3); PS:当文本过多时,若想让指定文字显示,只需将光标移动到要显示的文字即可。 Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 TextView设置文字透明和文本高亮显示 原文地址: http://orgcent.com/android-textview-alpha-highlight/ TextView设置文字透明效果,只要降低文字颜色的透明度就可以了。而让文本高亮显示可以 设置文本的背景或前景色高亮。 1、TextView设置文字透明效果 //android:textColor="#ff00ff00" //在XML中使用颜色码设置文本颜色,若要设置透明度,只须设置第一、二位数字即可。颜色码 的规则:透明度(2位)红色(2位)绿色(2位)蓝色(2位) mTVText.setTextColor(Color.argb(35, 0, 255, 0)); 2、TextView设置文本高亮显示 mTVText.setText("http://orgcent.com文本高亮显示代码 ",BufferType.EDITABLE); Editable et = mTVText.getEditableText(); //设置前景色:new ForegroundColorSpan(Color.CYAN); et.setSpan(new BackgroundColorSpan(Color.BLUE), 5, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE); PS:文本高亮是设置前景色还是背景色,根据需要即可。 Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 TextView显示插入的图片 原文地址: http://orgcent.com/android-textview-imagespan-imagegetter-setcompounddrawables/ Android系统默认给TextView插入图片提供了三种方式: 1、ImageSpan 2、Html.ImageGetter 3、TextView.setCompoundDrawables(left, top, right, bottom) 1、TextView使用ImageSpan显示图片 ImageSpan span = new ImageSpan(this, R.drawable.ic_launcher); SpannableString spanStr = new SpannableString("http://orgcent.com"); spanStr.setSpan(span, spanStr.length()-1, spanStr.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.setText(spanStr); PS:关于SpannableString相关的其他span,查看 http://orgcent.com/android-textview-spannablestring-span/ 2、使用Html.ImageGetter显示网页中的图片 查看文章:http://orgcent.com/android-textview-parse-html-image-tag/ 3、在TextView四周显示图片 mTVText.setText("setCompoundDrawables"); Drawable d = getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0, 0, 50, 50); //必须设置图片大小,否则不显示 mTVText.setCompoundDrawables(d , null, null, null); Android 教程 萝卜白菜的博客 http://orgcent.com/ QQ 群:104042731 TextView属性android:ellipsize实现跑马灯效果 原文地址: http://orgcent.com/android-textview-ellipsize-marquee/ Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1、android:ellipsize="marquee" 2、TextView必须单行显示,即内容必须超出TextView大小 3、TextView要获得焦点才能滚动 XML代码: android:ellipsize="marquee", android:singleLine="true" Java代码: mTVText.setText("哼唱接撒砥砺风节雷锋精神http://orgcent.com/,很长很长很长很 长很长很长的数据"); mTVText.setSingleLine(true); mTVText.setEllipsize(TruncateAt.MARQUEE); PS: TextView.setHorizontallyScrolling(true); //让文字可以水平滑动 TextView还可以设置跑马灯效果的滚动次数,如下: XML代码设置: android:marqueerepeatlimit="1"。1代表1次,-1代表无限循环。 Java代码设置: mTVText.setMarqueeRepeatLimit(-1);
还剩19页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

liming0604

贡献于2014-07-28

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf