先看看TextView的类继承结构:
java.lang.Object ↳ android.view.View ↳ android.widget.TextView
是直接继承View类的,可扩展性很强!以后自定义控件都可以继承TextView,如果有这需要的话。
TextView怎么用就不多说了,这里主要总结一下它的几个容易搞混淆的属性以及一些比较有意义的用法,开始!
1、几个容易混淆的属性
android:gravity属性:设置文字内容在水平和垂直方向上居中显示,当然还有其他的显示方式。
android:layout_margin属性:设置该TextView控件距离周围其他控件的距离。
android:padding属性:设置文字内容距离控件四边的距离。
2、自动识别
android:autoLine属性:有none、web、email、phone、map、all这6个值。最常用的是web,这里就以web为例。如果再布局文件中不指定
android:autoLink="web",那么在程序中也可以来指定,不过要比在布局文件中要复杂一下,是通过Html的fromHtml方法来实现的。
textView.setText(Html.fromHtml("<a href='http://www.csdn.cn'>http://www.csdn.cn</a>"));
3、怎样为TextView指定边框?
我们都知道android系统本身的TextView是不支持边框的,但是如果有这个需要,怎么办呢?
方法一:自定义控件继承TextView方法,在onDraw方法中,画四条线做为边框即可!具体代码如下:
@Override protected void onDraw(Canvas canvas) { Paint p = new Paint(); p.setColor(Color.WHITE); canvas.drawLine(0, 0, this.getWidth()-1, 0, p);// 画上横线 canvas.drawLine(0, 0, 0, this.getHeight()-1,p );// 画左竖线 canvas.drawLine(0, this.getHeight(), this.getWidth(), this.getHeight(), p);// 画下横线 canvas.drawLine(this.getWidth(), 0, this.getWidth(), this.getHeight(), p);// 画右竖线 super.onDraw(canvas); }
方法二:添加一个带边框的背景图片!但是在制作图片的时候最好先知道TextView的大小,以免将图片拉伸变形。
4、设置文本的行间距
android:lineSpaceingExtra属性:设置精确的行间距。
android:lineSpaceingMultiplier属性:设置行间距,以默认行间距的倍数来权衡的。
当两种都设置了的话,就以行间距最大的那个为准。
5、实现跑马灯的效果
跑马灯在很多开发中都会运用到,大家都知道,如果在布局文件中设置了TextView的跑马灯属性的话,只有在该TextView着焦的时候才会开始跑马灯效果,失去焦点又停了下来,那么究竟如何去实现它呢?这里我觉得最好的方式就是自己写一个类继承自TextView,并且覆写isFoused(),让这个方法返回true,那么这个TextView就会一直返回着焦的状态,在着焦和没有着焦的情况下都会有跑马灯的效果,而需要一直有这个跑马灯的效果的话,还需要在配置文件中配置。
下面看看自己定义的类MyTextView.java 。很简单,就只改了一句话!
public class MyTextView extends TextView { public MyTextView(Context context) { super(context); } public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean isFocused() { return true;// 返回真 } }
配置文件:
<dxd.android.test.MyTextView android:id="@+id/listview_items_textview_title" android:layout_width="200dp" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:text="最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单!" />
对代码做一点说明:
android:ellipsize="marquee"属性:设置跑马灯效果
android:marqueeRepeatLimit="marquee_forever"属性:永远执行跑马灯效果
基本的TextView的用法就差不多了,这些都很够用了!