前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的UI界面基本组件。
一、认识TextView
我们知道前面学习的HelloWorld应用程序中就是使用的TextView来显示一个文本,接下来首先一起来学习TextView的使用方法。
TextView的作用就是在界面上显示文本。TextView直接继承了 View,是EditText、Button两个UI组件类的父类,TextView与其子类的类图如下图所示:
TextView提供了大量的XML属性,这些XML属性大部分不仅可适用于TextView,而且可适用于它的子类(EditText、Button等)。下表显示了TextView支持的XML属性及相关方法。
XML属性 | 相关方法 | 说明 |
---|---|---|
android:autoLink | setAutoLinkMask(int) | 是否将符合指定格式的文本转换为可单击的超链接形式 |
android:autoText | setKeyListener(KeyListener) | 控制是否将URL、E-mail地址等连接自动转换为可单击的链接 |
android:capitalize | setKeyListener(KeyListener) | 控制是否将用户输入的文本转换为大写字母。该属性支持如下属性值: none:不转换 sentence:每个句子的首字母大写 words:每个单词的首字母大写 characters:每个字母都大写 |
android:cursorVisible | SetCursorVisible(boolean) | 设置该文本框的光标是否可见 |
android:digits | setKeyListener(KeyListener) | 如果该属性设为true,则该文本框对应一个数字输入方法,并且只接受那些合法字符 |
android:drawableBottom | setCompoundDrawablesWithIntrinsicBounds(Drawable, Drawable, Drawable, Drawable) | 在文本框内文本的底端绘制指定图像 |
android:drawableEnd | 在文本框内文本的结尾处绘制指定图像 | |
android:drawableLeft | setCompoundDrawablesWithIntrinsicBounds(Drawable, Drawable, Drawable, Drawable) | 在文本框内文本的左边绘制指定图像 |
android:drawablePadding | setCompoundDrawablesWithIntrinsicBounds(Drawable,Drawabl,Drawabl,Drawabl) | 在文本框内文本与图形之间的间距 |
android:drawableRight | setCompoundDrawablesWithIntrinsicBounds(Drawable,Drawabl,Drawabl,Drawabl) | 在文本框内文本的右边绘制指定图像 |
android:drawableStart | setCompoundDrawablesWithIntrinsicBounds(Drawable,Drawabl,Drawabl,Drawabl) | 在文本框内文本的开始处绘制指定图像 |
android:drawableTop | setCompoundDrawablesWithIntrinsicBounds(Drawable,Drawabl,Drawabl,Drawabl) | 在文本框内文本的顶端绘制指定图像 |
android:editable | 设置该文本是否允许编辑 | |
android:ellipsize | setEllipsize(TextUitls.TruncateAt) | 设置当显示文本超过了TextView的长度时如何处理文本内容。该属性支持如下属性值: none:不做任何处理 start:在文本开始处截断,并显示省略号 middle:在文本中间处截断,并显示省略号 end:在文本结尾处截断,并显示省略号 marquee:使用marquee滚动动画显示文本 |
android:ems | setEms(int) | 设置该组件的宽度,以em为单位 |
android:fontFamily | setTypeface(Typeface) | 设置该文本框内文本的字体 |
android:gravity | setGravity(int) | 设置文本框内文本的对齐方式 |
android:height | setHeight(int) | 设置该文本框的高度(以pixel为单位) |
android:hint | setHint(int) | 当设置文本框内容为空时,文本框内默认显示的提示文本 |
android:imeActionId | setImeActionIdLabel(CharSequence,int) | 当该文本框关联输入法时,为输入法提供EditorInfo.actionId值 |
android:imeActionLabel | setImeActionIdLabel(CharSequence,int) | 当该文本框关联输入法时,为输入法提供EditorInfo.actionLabel值 |
android:imeOptions | setImeOptions(int) | 当该文本框关联输入法时,为输入法指定额外的选项 |
android:includeFontPadding | setIncludeFontPadding(boolean) | 设置是否为字体保留足够的空间。默认值为true |
android:inputMethod | setKeyListener(KeyListener) | 为该文本框指定特定的输入法。该属性值为输入法的全限定类名 |
android:inputType | setRawInputType(int) | 指定该文本框的类型。该属性有点类似HTML中<input.../>元素的type属性。该属性支持大量的属性值,不同属性值用于指定特定的输入框 |
android:lineSpacingExtra | setLineSpacing(float, float) | 控制两行文本之间的额外间距。与android:lineSpacingMultiplier属性结合使用 |
android:lineSpacingMultiplier | setLineSpacing(float, float) | 控制两行文本之间的额外间距。每行文本为高度*该属性值+ android:lineSpacingExtra属性值 |
android:lines | setLines(int) | 设置该文本框默认占几行 |
android:linksClickable | setLinksClickable(boolean) | 控制该文本框的URL、E-mail等链接是否可点击 |
android:marqueeRepeatLimit | setMarqueeRepeatLimit(int) | 设置marquee动画重复的次数 |
android:maxEms | setMaxEms(int) | 指定该文本框的最大宽度(以em为单位) |
android:maxHeight | setMaxHeight(int) | 指定该文本框的最大高度(以pixel为单位) |
android:maxLength | setFilters(InputFilter) | 设置该文本框的最大字符长度 |
android:maxLines | setMaxLines(int) | 设置该文本框最多占几行 |
android:maxWidth | setMaxWidth(int) | 指定该文本框的最大宽度(以pixel为单位) |
android:minEms | setMinEms(int) | 指定该文本框的最小宽度(以em为单位) |
android:minHeight | setMinHeight(int) | 指定该文本框的最小高度(以pixel为单位) |
android:minLines | setMinLines(int) | 设置该文本框最少占几行 |
android:minWidth | setMinWidth(int) | 指定该文本框的最小宽度(以pixel为单位) |
android:numeric | setKeyListener(KeyListener) | 设置该文本框关联的数值输入法。该属性支持如下属性值: integer:指定关联整数输入法 signed:允许输入符号的数值输入法 decimal:允许输入小数点的数值输入法 |
android:password | setTransformationMethod(TransformationMethod) | 设置该文本框是一个密码框(以点代替字符) |
android:phoneNumber | setKeyListener(KeyListener) | 设置该文本框只能接受电话号码 |
android:privateImeOptions | setPrivateImeOptions(boolean) | 设置该文本框关联的输入法的私有选项 |
android:scrollHorizontally | setHorizontallyScrolling(boolean) | 设置该文本框不够显示全部内容时是否允许水平滚动 |
android:selectAllOnFocus | setSelectAllOnFocus(boolean) | 如果文本框的内容可选择,设置是否当它获得焦点时自动选中所有文本 |
android:shadowColor | setShadowLayer(float, float, float, float) | 设置文本框内文本的阴影颜色 |
android:shadowDx | setShadowLayer(float, float, float, float) | 设置文本框内文本的阴影在水平方向的偏移 |
android:shadowDy | setShadowLayer(float,float,float, float) | 设置文本框内文本的阴影在垂直方向的偏移 |
android:shadowRadius | setShadowLayer(float,float,float, float) | 设置文本框内文本的阴影的模糊程度。该值越大,阴影越模糊 |
android:singleLine | setTransformationMethod | 设置文本框是否为单行模式。如果设为true,文本框不会换行 |
android:text | setText(CharSequence) | 设置文本框内文本的内容 |
android:textAllCaps | setAllCaps(boolean) | 设置是否将文本框的所有字母显示为大写字母 |
android:textAppearance | 设置该文本框的颜色、字体、大小等样式 | |
android:textColor | setTextColor(ColorStateList) | 设置文本框中文本的颜色 |
android:textColorHighlight | setHighlightColor(int) | 设置文本框中文本被选中时的颜色 |
android:textColorHint | setHintTextColor(int) | 设置文本框中提示文本的颜色 |
android:textColorLink | setLinkTextColor(int) | 设置文本框中链接的颜色 |
android:textIsSelectable | isTextSelectable() | 设置文本框不能编辑时,文本框内的文本是否可以被选中 |
android:textScaleX | setTextScaleX(float) | 设置文本框内文本在水平方向上的缩放因子 |
android:textSize | setTextSize(float) | 设置文本框内文本的字体大小 |
android:textStyle | setTypeface(Typeface) | 设置文本框内文本的字体风格,如粗体、斜体等 |
android:typeface | setTypeface(Typeface) | 设置文本框内文本的字体风格 |
android:width | setWidth(int) | 设置该文本框的宽度(以pixel为单位) |
TextView派生了一个 CheckedTextView 类,CheckedTextView 增加了一个checked状态,开发者可通过 setChecked(boolean)和 isChecked()方法来改变、访问该组件的checked状态。除此之外,该组件还可通过setCheckMarkDrawable() 方法来设置它的勾选图标。
TextView还派生了Button类和EditText类,会在后续进行学习,此处不做过多介绍。
二、示例程序
接下来通过一个简单的示例程序来学习TextView的常见用法。
同前面创建创HelloWorld工程已于新建一个WidgetSample工程,在app/main/res/layout/目录下创建一个textview_layout.xml文件。
选中layout,鼠标右键弹出菜单,依次选择New -> XML -> Layout XML File,或依次选择New -> Layout resource file,或者选择layout后通过File菜单或新建图标完成,如下图所示:
弹出XML文件创建页面,如下图所示:
在Layout File Name输入布局名“textview_layout”,点击“Finish”完成创建。
默认创建的布局文件如图所示,然后在其中填充如下代码片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 设置文字颜色、大小、样式 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="红色粗体倾斜的TextView"
android:textColor="#EA5246"
android:textStyle="bold|italic"
android:textSize="18sp" />
<!-- 使用阴影 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:shadowColor="#F9F900"
android:shadowDx="10.0"
android:shadowDy="10.0"
android:shadowRadius="3.0"
android:text="带阴影的TextView"
android:textColor="#4A4AFF"
android:textSize="30sp" />
<!-- 带图片 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:drawableTop="@mipmap/ic_launcher"
android:drawableLeft="@mipmap/ic_launcher"
android:drawableRight="@mipmap/ic_launcher"
android:drawableBottom="@mipmap/ic_launcher"
android:text="带图片的TextView" />
<!-- 对邮件、电话、网址增加链接 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="邮件:cqkxzsxy@163.com\n电话:13052288888\n博客:http://blog.csdn.net/cqkxzsxy"
android:autoLink="email|phone|web"/>
<!-- 实现跑马灯效果 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="实现跑马灯效果的TextView,Android零基础入门到精通系列教程,欢迎关注微信公众号ShareExpert~"/>
</LinearLayout>
然后修改一下app/src/java/MainActivity.java文件中加载的布局文件,如下所示:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
setContentView(R.layout.textview_layout);
}
}
然后运行程序,可以看到下图所示界面效果。
到此,TextView的示例结束,关于TextView的更多用法可以参照上面的XML属性和方法参照表,建议多动手练习。