- 浏览: 82766 次
- 性别:
- 来自: 广州
最新评论
-
Tony_Lee-S:
已经说得很明白了吧?“把list强转成Serializable ...
在android中用 Intent 传递 List类型的数据(转) -
zhiduo5:
Activity与Service之间传递参数的介质这个怎么弄啊 ...
在android中用 Intent 传递 List类型的数据(转) -
mathlove:
很有用的内容
一个Android下的自动下载歌词的代码(转)
package com.liao.intentservice; import java.util.Arrays; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.FontMetrics; import android.graphics.Paint.Style; import android.util.AttributeSet; import android.util.TypedValue; import android.view.View; public class AutoText extends View { private Paint mPaint = new Paint(); public AutoText(Context context) { this(context,null); } public AutoText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public AutoText(Context context, AttributeSet attrs) { this(context,attrs,0); } private void init() { mPaint.setAntiAlias(true); mPaint.setColor(Color.RED); mPaint.setStyle(Style.STROKE); mPaint.setTextSize(getRawSize(TypedValue.COMPLEX_UNIT_DIP, 15)); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // setMeasuredDimension(300, 200); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //view.draw()绘制了控件的背景 //控件的绘制操作及顺序: /* * Draw traversal performs several drawing steps which must be executed * in the appropriate order: * * 1. Draw the background (绘制控件设置的背景) * 2. If necessary, save the canvas' layers to prepare for fading * 3. Draw view's content (可以重写, onDraw(canvas);) * 4. Draw children (可重写,用来分发画布到子控件,具体看ViewGroup。对应方法dispatchDraw(canvas);此方法依次调用了子控件的draw()方法) * 5. If necessary, draw the fading edges and restore layers (绘制控件四周的阴影渐变效果) * 6. Draw decorations (scrollbars for instance) (用来绘制滚动条,对应方法onDrawScrollBars(canvas);。 * 可以重写onDrawHorizontalScrollBar()和onDrawVerticalScrollBar()来自定义滚动条) */ //可以绘制内容和滚动条。 //draw backgroud canvas.drawColor(Color.WHITE); //draw text FontMetrics fm = mPaint.getFontMetrics(); float baseline = fm.descent - fm.ascent; float x = 0; float y = baseline; //由于系统基于字体的底部来绘制文本,所有需要加上字体的高度。 //String txt = getResources().getString("asda"); String txt = "计算机科学或相关专业领域的本科及以上学历, 并有2年以上相关工作经验;2、在计算机技术领域拥有扎实的技术功底,尤其在数据结构、算法和代码、软件设计方面功力深厚;" + "+3、熟悉分布式计算、网络系统设计,数据库设计和大规模存储系统,娴熟的C/C++编程技巧"+ "4、熟悉HTTP协议,开发基于HTTP协议的应用;有联网应用、联网游戏开发经验者优先"+ "5、具备Web service/Ajax/JavaScript/Apache/Tomcat/Struts/iBatis/Spring/PHP/JSP/Python等方面经验者优先考虑;"+ "6、熟悉TCP/IP协议,熟悉socket和多线程开发,具备高访问量网络开发工作经验。"; //文本自动换行 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; //添加字体行间距 } } /** * 自动分割文本 * @param content 需要分割的文本 * @param p 画笔,用来根据字体测量文本的宽度 * @param width 指定的宽度 * @return 一个字符串数组,保存每行的文本 */ 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; 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; } /** * 获取指定单位对应的原始大小(根据设备信息) * px,dip,sp -> px * * Paint.setTextSize()单位为px * * * * 代码摘自:TextView.setTextSize() * * @param unit TypedValue.COMPLEX_UNIT_* * @param size * @return */ public float getRawSize(int unit, float size) { Context c = getContext(); Resources r; if (c == null) r = Resources.getSystem(); else r = c.getResources(); return TypedValue.applyDimension(unit, size, r.getDisplayMetrics()); } }
转自:
http://blog.csdn.net/liao3841054/article/details/7165708
发表评论
-
SQLite多线程读写实践及常见问题总结(转)
2013-02-07 11:04 3040基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了 ... -
android内存溢出的解决方法(转)
2013-02-07 11:23 8241. 当项目中包含大量图片,或者图片过大 方法1:等比例缩 ... -
android中的跨进程通信的实现——远程调用过程和aidl(转)
2013-02-07 19:35 1348android在设计理念上强调组件化,组件之间的依赖性很小。 ... -
在EditText/TextView中插入表情图片、样式、下划线等(转)
2012-08-22 12:01 1605EditText: 通常用于显示文字,但有时候也需要在文字中 ... -
自定义Tab选项卡(转)
2012-08-21 08:44 1507效果: 代码: import android.app. ... -
android设置button透明度(转)
2012-08-18 22:09 1307Button或者ImageButton的背景设为透明或者半透明 ... -
Android中的TabHost(转)
2012-08-17 14:50 2231介绍 有时,我们想在一个window中显示多个视图,这时就需 ... -
Android开发之蓝牙(Bluetooth)操作(二)--修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备(转)
2012-08-15 16:54 1474一. 修改本机蓝牙设备的可见性 二. 扫描周围可用的蓝牙设备 ... -
Android开发之蓝牙(Bluetooth)操作(一)--扫描已经配对的蓝牙设备(转)
2012-08-15 16:49 1744一. 什么是蓝牙(Bluetooth)? 1.1 BuleT ... -
一个Android下的自动下载歌词的代码(转)
2012-08-15 13:41 12081. 原理是用Baidu音乐搜索的连接,拼参数进去读取歌词。 ... -
ViewPager多页面滑动切换以及动画效果(转)
2012-08-14 16:55 1905一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我 ... -
Android的Handler总结(转)
2012-08-14 14:18 924一、Handler的定义: 主要接受子线程 ... -
AsyncTask的用法(转)
2012-08-14 14:11 903在开发Android应用时必须遵守单线程模型的原则: Andr ... -
Android逐帧动画(转)
2012-08-13 16:46 1793Android有两种动画,一种是tweened animati ... -
android 扫描SD卡与系统文件(转)
2012-08-11 16:12 1350当手机或模拟器开机时,会调用android的MediaScan ... -
android 怎样为多媒体文件生成缩略图(转)
2012-08-10 17:11 12861、Video 对于视频,取第一帧作为缩略图,也就是怎样从fi ... -
android:屏幕自适应(转)
2012-08-10 16:10 1404demo下载: http://www.eoeandroid.c ... -
listview加载性能优化ViewHolder (转)
2012-07-28 15:16 1465在android开发中Listview是一个很重要的组件,它以 ... -
android 应用程序Activity之间数据传递与共享的几种途径(转)
2012-07-19 11:03 15141.基于消息的通信机制 Intent ---boudle , ... -
Android进程间通信--消息机制及IPC机制实现(转)
2012-07-19 10:51 844一、概念及说明 Android ...
相关推荐
这就涉及到`TextView`的自动换行与截断设置。本文将详细讲解如何在`TextView`中解决自动换行问题,并设置超过指定行数后使用省略号。 首先,我们需要了解`TextView`的一些关键属性: 1. `android:singleLine`:此...
在某些场景下,开发者可能需要自定义TextView的行为,比如取消默认的自动换行功能,以便实现一行显示完整内容或者特定的排版效果。本文将详细讲解如何解决TextView的自动换行问题,并结合提供的`CustomTextView.java...
本项目是一个年前的Android应用源码示例,专为学生毕业设计学习而准备,旨在教授如何让TextView根据文本长度自动换行,以适应不同屏幕尺寸和用户需求。 在Android中,TextView默认情况下会自动换行,当一行文本无法...
通常,为了实现自动换行,我们需要将`layout_width`设置为"wrap_content",让TextView根据内容的宽度自适应。 7. `android:textSize`:用于设置文本的字体大小,可以影响一行能容纳多少字符。 8. `android:input...
其次,为了实现TextView动态变化行数的功能,我们可以利用`setMaxLines()`方法限制TextView的最大显示行数。当用户点击“显示更多”时,我们可以调用`setMaxLines(Integer.MAX_VALUE)`显示所有内容;而点击“隐藏”...
本教程将深入探讨如何在iOS应用中实现`textView`的自动换行,并优化输入框适配。 首先,我们要了解`UITextView`的基础属性和方法。`UITextView`继承自`UIView`,它有一个关键属性`textContainer`,用于存储和显示...
这个压缩包"安卓Android源码——textView根据长度自动换行.zip"很可能包含了一个示例项目或代码片段,演示了如何在TextView中实现根据文本长度自动换行的功能。 在Android的TextView中,自动换行是默认开启的。当你...
本文将深入探讨如何解决`TextView`自动换行导致的排版问题,并允许我们设置`SpannableString`以实现更多样化的文本效果。 首先,理解`TextView`的换行机制至关重要。`TextView`默认会根据其宽度自动进行文本换行,...
2. **实现自动换行**: TextView的自动换行功能主要是通过`LayoutParams`来控制的。在自定义View中,我们可以根据需要调整LayoutParams的宽度,以达到预期的换行效果。例如,我们可以设置为`WRAP_CONTENT`: ```...
在实现自动换行的过程中,我们还需要注意以下几点: - **间距控制**:为了在换行时保持一致的间距,我们需要在添加子View时考虑到行间的间距。这通常在`onLayout()`中处理,确保每个子View与前一个子View之间有固定...
二、实现自动换行 在大多数情况下,`TextView`会默认根据文本长度自动换行。只需确保`android:singleLine`不是`true`,且没有设置特定的`maxLines`限制,`TextView`就会根据需要自动换行。例如,以下XML布局代码会...
然而,有时开发者会遇到一个棘手的问题,即`TextView`中的换行文字可能不会对齐,尤其是在多行显示时。这个问题通常表现为每一行的起始位置不一致,影响了整体布局的美观度。本文将深入探讨这个问题及其解决方案。 ...
"textView根据长度自动换行.zip"这个压缩包很可能包含了关于如何在TextView中实现文本自动换行的源码示例或者教程。在Android中,TextView的换行功能是默认开启的,但有时开发者可能需要对这个功能进行自定义,以...
为了实现“多个view自动换行”,我们可以考虑使用`GridLayout`或者自定义布局。`GridLayout`允许每个子视图占据固定大小的网格,并会自动换行以填充整个容器。然而,`GridLayout`在处理不同大小的视图时可能会显得...
本资源"安卓Andriod源码——textView根据长度自动换行.zip"可能包含了一个示例项目,演示了如何在TextView中实现这一功能。 首先,我们了解TextView的基本属性。在XML布局文件中,TextView可以通过`android:single...
Android LinearLayout 实现自动换行 Android LinearLayout 实现自动换行是 Android 开发中常见的需求。LinearLayout 是 Android 中最常用的布局控件之一,但它有一个缺陷,就是不能自动换行。今天,我们将详细介绍...
在"AutoNewLineText"这个压缩包中,很可能包含了一个实现了上述功能的自定义TextView类,我们可以查看源代码学习其具体实现方式。通常,这样的自定义控件会包含以下关键部分: 1. **内部状态变量**:如当前显示的...
本类实现了文字的竖直排版显示(中国古时的行文形式),虽然仍有许多特效及功能仍未实现,但基本的使用已经能满足。版权:尽管放心用吧,可以自行随意改进转载和使用,转载时请保留这段文字即可另特别感谢 老僧xp ...
在这个案例中,我们将自定义一个`ViewGroup`子类,比如命名为`AutoWrapTagLayout`,来实现自动换行的功能。 实现这个功能的关键在于计算每个标签的宽度,并根据屏幕宽度动态调整它们的布局。我们需要覆写`onMeasure...