- 浏览: 433655 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yehuiyan8002:
支持中文查询
快熟查找联系人 -
lehehe:
现成的接口,免费试用,http://www.haoservic ...
天气Widget -
D.Z:
android:focusable="false&q ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
freecode:
碰到该问题,CheckBox的android:focusabl ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
echohfut:
哥们,新博客是不是在墙外啊?不能访问。还有你怎么进行博客迁移的 ...
博客 迁移
自定义View
[功能]
1. 自定义View 实现 TextView 的功能
2. 典型的 TextView 如下:
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="HelloTextView" />
写道
android:text="HelloTextView"
就会显示指定的String
[代码]
1. 定义Text2View 所用关键字"text" 用于指定显示用的string
* 在 res/value 目录下创建 attrs.xml 文件 如下定义:
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Text2View"> <attr name="text" format="string" /> </declare-styleable> </resources>
2. 定义 public class Text2View extends View
public class Text2View extends View { Paint text2Paint; String text2Text; int ascent; //Constructor - for java public Text2View(Context context) { super(context); initialize(); } //Constructor - for xml public Text2View(Context context, AttributeSet attrs) { super(context, attrs); initialize(); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.Text2View); int n = ta.getIndexCount(); for(int i =0;i < n;i++){ int attr = ta.getIndex(i); switch(attr){ case R.styleable.Text2View_text: updateText(ta.getString(R.styleable.Text2View_text)); break; //TO ADD CUSTOM ATTRIBUTE default: break; } } ta.recycle(); } private final void updateText(String s){ text2Text = s; requestLayout(); invalidate(); } //load default setting on Text2View private final void initialize() { text2Paint = new Paint(); text2Paint.setAntiAlias(true); text2Paint.setTextSize(16); text2Paint.setColor(0xFF000000); //setPadding(3, 3, 3, 3); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); } private int measureWidth(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { // We were told how big to be result = specSize; } else { // Measure the text result = (int) text2Paint.measureText(text2Text) + getPaddingLeft() + getPaddingRight(); if (specMode == MeasureSpec.AT_MOST) { // Respect AT_MOST value if that was what is called for by measureSpec result = Math.min(result, specSize); } } return result; } /** * Determines the height of this view * @param measureSpec A measureSpec packed into an int * @return The height of the view, honoring constraints from measureSpec */ private int measureHeight(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); ascent = (int) text2Paint.ascent(); if (specMode == MeasureSpec.EXACTLY) { // We were told how big to be result = specSize; } else { // Measure the text (beware: ascent is a negative number) result = (int) (-ascent + text2Paint.descent()) + getPaddingTop() + getPaddingBottom(); if (specMode == MeasureSpec.AT_MOST) { // Respect AT_MOST value if that was what is called for by measureSpec result = Math.min(result, specSize); } } return result; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawText(text2Text, getPaddingLeft(), getPaddingTop() - ascent, text2Paint); } }
3. Text2View 构造函数需要解释一下:
//Constructor - for java public Text2View(Context context) { super(context); initialize(); } //Constructor - for xml public Text2View(Context context, AttributeSet attrs) { super(context, attrs); initialize(); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.Text2View); int n = ta.getIndexCount(); for(int i =0;i < n;i++){ int attr = ta.getIndex(i); switch(attr){ case R.styleable.Text2View_text: updateText(ta.getString(R.styleable.Text2View_text)); break; //TO ADD CUSTOM ATTRIBUTE default: break; } } ta.recycle(); }
4. 在 xml 文件中如何使用Text2View
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.android.View" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="HelloTextView" /> <com.android.View.Text2View android:layout_width="fill_parent" android:layout_height="wrap_content" app:text="HelloText2View" /> </LinearLayout>
5. 效果图 和默认的TextView 比较一下
评论
14 楼
zhs2472
2011-01-11
写得不错,能明白一些原理,期待楼主多写点这类的,加油
13 楼
luckwangjing
2011-01-10
建议LZ下载android源代码!里面有详细的实现代码。
12 楼
kldwq2002
2011-01-10
为什么不懂还装蛋的回复这么多呢?
11 楼
javetu_7
2010-07-28
TextView上怎么显示光标?
10 楼
wjb_forward
2010-04-01
哎呀,居然没看太懂,麻烦把源码发出来看看吧,最好把注释写详细点,谢谢
9 楼
yyw8316zpp
2010-03-29
这方面的前辈们,俺是接触开发的新手,刚进公司,求这方面的发展,谁能给点资料,越基础越好。谢谢。
8 楼
yzhong_sa
2010-03-28
对于做自己的ui确实有一些提示
7 楼
wjb_forward
2010-03-12
写得很好,但是,能不能在关键的地方加点注释啊,看不大懂
6 楼
gryphone
2010-01-23
melode11 写道
Lz实现个textView写那么长篇...不就是onMeasure和onDraw俩方法.
那你知道系统的TextView 实现的原理么? 这就是我写这个的本意!
5 楼
melode11
2010-01-22
另外真想订制textView的外观,可以继承textView.重写onDraw
4 楼
melode11
2010-01-22
Lz实现个textView写那么长篇...不就是onMeasure和onDraw俩方法.
3 楼
ansili
2010-01-21
很好,很强大。
最近急需这类知识。
最近急需这类知识。
2 楼
gryphone
2010-01-20
yzhong_sa 写道
这个 意义何在?
定制化View啊 再作为模板
1 楼
yzhong_sa
2010-01-20
这个 意义何在?
发表评论
-
滑动抽屉 另一种解决办法
2010-07-09 17:43 0滑动抽屉 -
Spinner 定制化 增强版
2010-07-09 14:34 2609Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5925ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3170MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 19015CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3138获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9440PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5955Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14445SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1452Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2224流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3225NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1221自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3158模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2470TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3985View 拖动&插入 即: ... -
带图标 快捷键 Menu - 终极版
2010-05-04 20:23 1837Menu 改头换面 扩展如下: 1. 图标化文字 2 ... -
*.gif 解码 - 实践
2010-05-02 18:58 1737*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1522我们知道Android 默认是不支持*.gif 的 但是 ...
相关推荐
本示例中,我们探讨的是如何自定义一个TextView来实现垂直自动轮播功能,这个控件名为`ScrollTextView`,它继承了`TextSwitcher`。`TextSwitcher`是一个用于在两个视图之间切换文本的视图,通常用于动画效果,而在...
在提供的"Textview_intent"文件中,可能包含了具体的代码示例或者更详细的实现步骤,你可以查看该文件以获取更多实践信息。在实际开发中,结合这些资料进行学习和实践,将有助于你更好地掌握自定义控件的技巧。
这个项目中应该包含了具体的XML布局文件和Java代码示例,帮助你更好地理解跑马灯效果的工作原理和实现方式。在实际开发中,可以根据需求调整滚动速度、延迟时间等参数,以满足不同场景下的需求。
在Android应用开发中,底部导航栏(Bottom Navigation)是一种常见的用户界面设计,它允许用户在应用的多个顶级视图之间快速切换。...通过实践这个示例,开发者可以深入理解Android中动态界面切换的原理和实践技巧。
在Android开发中,TextView是用于显示文本的基本组件。...你可以参考这些代码,理解其实现原理,并根据项目的具体需求进行定制和优化。通过这样的实践,你将对Android UI组件的自定义和交互有更深入的理解。
在Android开发中,为UI元素添加动画效果可以极大地提升用户体验,"Android TextView闪闪发光特效...通过学习和实践`ShimmerDemo`和`ShimmerLibrary`,开发者可以深入理解这种特效的原理,并灵活运用到自己的项目中。
对于Android源码的深入理解,掌握TextView的工作原理和内部机制对于优化UI性能、解决布局问题以及自定义控件开发具有重要意义。 在`textView1.rar`这个压缩包中,我们可能包含了对TextView类的源码分析或扩展。源码...
在本篇文章中,我们将深入探讨如何实现这种效果,包括基本原理、实现方法以及一些优化技巧。 首先,我们要理解TextView的基本工作原理。TextView是Android系统提供的一个视图组件,用于显示单行或多行文本。默认...
通过这个简单实例,新手开发者可以了解到Android自定义控件的基本原理和实践过程,进一步提升开发技能。 至于压缩包中的"Android_DragButton"文件,可能是与这个教程相关的示例代码或者项目源码。如果你希望深入...
总结来说,这个压缩包提供了一个在TextView上实现动态波浪形动画的实例,对于想要增强Android应用界面交互性的开发者来说,是一个宝贵的参考资料。通过深入研究和实践,可以提升在Android图形和动画领域的技能。
下面将详细讨论`ExpandTextView`的核心功能、实现原理以及如何在项目中应用。 1. **核心功能** `ExpandTextView`的主要功能是在有限的空间内展示过多的文本,提供一个简洁的方式让用户选择是否展开全部内容。默认...
#### 一、`SeekBar` 与 `TextView` 的结合原理 在 `SeekBar` 上添加一个百分比显示的 `TextView` 主要涉及到以下几点: 1. **监听 `SeekBar` 的变化**:通过 `OnSeekBarChangeListener` 接口可以监听到 `SeekBar` ...
自定义`TextView`是Android开发中的常见实践,它可以帮助开发者解决标准组件无法满足的需求,提高应用的用户体验。通过深入理解`TextView`的工作原理和Android图形绘制机制,我们可以创造出更多富有创意的UI元素。...
在Android应用开发中,TextView是不可或缺的一个控件,它用于显示文本内容,广泛应用于各种界面元素,如标签、按钮、...通过学习和实践,开发者能更好地掌握在Android应用中如何有效利用TextView实现各种文本展示需求。
我们将深入讨论每个控件的实现原理,并提供相关的代码示例。 首先,我们来看带图标的TextView。在标准的Android TextView中,通常只能显示纯文本,但通过自定义控件,我们可以扩展其功能,使其能够显示图标和文本。...
首先,我们来看一下实现原理。在Android中,TextView是默认不可折叠的,因此我们需要对其进行扩展,创建一个新的自定义视图类。这个自定义视图继承自TextView,并添加了额外的功能来处理展开和折叠的逻辑。关键在于...
本文将探讨在TextView和ListView这两种常见组件上实现手势检测的方法,并进行对比验证,以此来提升Android应用的交互性。我们将主要关注以下几个方面: 1. **手势识别基础**: 手势识别在Android中主要通过`...
源码学习可以帮助开发者深入理解TextView的工作原理。例如,查看`TextView`的`onMeasure()`方法,可以看到它是如何计算文本的尺寸并确定是否需要换行的。同时,`Layout`类的`calculateLineHeight()`和`...
**TextView 深度解析与应用实践** 在 Android 开发中,TextView 是最基础且重要的控件之一,它用于展示文本信息,支持多种格式和样式。这篇博客将深入探讨 TextView 的内部工作原理、常见功能以及如何通过源码理解...
通过分析"textView.zip"中的源码,我们可以学习到如何在小程序中使用和定制TextView组件,理解其工作原理,并且可以借鉴其中的实践技巧,提升自己的小程序开发能力。同时,也可以根据源码中的设计思路,进行二次开发...