从功能上来看,TextView 其实就是一个文本编辑器,只是 Android 关闭了它的文本编辑功能。TextView 提供了大量的 XML 属性,这些 XML 属性大部分不仅可适用于 TextView,而且可适用它的子类(EditText、Button等)。
XML 属性 | 相关方法 | 说 明 |
---|---|---|
android:autoLink | setAutoLinkMask(int) | 是否将符合指定格式的文本转换为可单击的超链接形式 |
android:autoText | setKeyListener(KeyListener) | 控制是否将URL、E-mail地址等链接自动转换为可单击的链接 |
android:capitalize | setKeyListener(KeyListener) | 控制是否将用户输入的文本转换为大写字母。该属性支持如下属性值。 none:不转换 sentences:每个句子的首字母大写 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,Drawable,Drawable,Drawable) |
设置文本框内文本与图形之间的间距 |
android:drawableRight | setCompoundDrawablesWithIntrinsicBounds (Drawable,Drawable,Drawable,Drawable) |
在文本框内文本的右边绘制指定图像 |
android:drawableStart | 在文本框内文本的开始处绘制指定图像 | |
android:drawableTop | setCompoundDrawablesWithIntrinsicBounds (Drawable,Drawable,Drawable,Drawable) |
在文本框内文本的顶端绘制指定图像 |
android:editable | 设置该文本是否允许编辑 | |
android:ellipsize | setEllipsize(TextUits.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 | setImeActionLabel(CharSequence,int) | 当该文本框关联输入法时,为输入法提供EditorInfo.actionId值 |
android:imeActionLabel | setImeActionLable(CharSequence,int) | 当该文本框关联输入法时,为输入法提供EditorInfo.actionLable值 |
android:imeOptions | setImeOptions(int) | 当该文本框关联输入法时,为输入法指定额外的选项 |
android:includeFontPadding | setIncludeFontPadding(boolean) | 设置是否为字体保留足够的空间。默认为true |
android:inputMethod | setKeyListener(KeyListener) | 为该文本框指定特定的输入法。该属性值为输入法的全限定类名 |
android:inputType | setRawInputType(int) | 指定该文本框的类型。该属性支持大量属性值,不同属性值用于指定特定的输入框 |
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 | setSTransformationMethod(TransformationMethod) | 设置该文本框是一个密码框(以点代替字符) |
android:phoneNumber | setKeyListener(KeyListener) | 设置该文本框只能接受电话号码 |
android:privateImeOptions | setPrivateImeOptions(String) | |
android:scrollHorizontally | setHorizontallyScrolling(boolean) | 设置当该文本框不够现实全部内容时是否允许水平滚动 |
android:selectAllOnFocus | setSelectAllOnFocus(boolean) | 如果文本框的内容可选择,设置是否当它获得焦点时自动选中所有文本 |
android:shadowColor | setShadowLayer(float,float,float,int) | 设置文本框内文本的阴影的颜色 |
android:shadowDx | setShadowLayer(float,float,float,int) | 设置文本框内文本的阴影在水平方向的偏移 |
android:shadowDy | setShadowLayer(float,float,float,int) | 设置文本框内文本的阴影在垂直方向的偏移 |
android:shadowRadius | setShadowLayer(float,float,float,int) | 设置文本框内文本的阴影的模糊程度。该值越大,阴影越模糊 |
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 | isTextSelectedable() | 设置该文本框不能编辑时,文本框内的文本是否可以被选中 |
android:textScaleX | setTextScaleX(float) | 设置文本框内文本在水平方向上的缩放因子 |
android:textSize | setTextSize(float) | 设置文本框中文本的字号大小 |
android:textStyle | setTypeface(Typeface) | 设置文本框中文本的字体风格,如粗体,斜体等 |
android:typeface | setTypeface(Typeface) | 设置文本框中文本的字体风格 |
android:width | setWidth(int) | 设置该文本框的宽度(以pixel为单位) |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我爱Java"
android:textSize="20sp"
android:drawableEnd="@drawable/ic_launcher"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="我爱Java我爱Java我爱Java我爱Java我爱Java我aaaJava"
android:ellipsize="middle"
android:textAllCaps="true"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="邮件是[email protected],电话是02088888888"
android:autoLink="email|phone"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试文字"
android:shadowColor="#00f"
android:shadowDx="10.0"
android:shadowDy="8.0"
android:shadowRadius="3.0"
android:textColor="#f00"
android:textSize="18sp"/>
<TextView android:id="@+id/passwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:password="true"/>
<CheckedTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="可勾选的文本"
android:checkMark="@drawable/ok" />
LinearLayout>
**第 1 个TextView 指定 android:textSize = “20sp”,而且指定在文本框的结尾处绘制图片
第 2 个TextView 指定 android:ellipsize = “middle”,这就指定了当文本多余文本框的宽度时,从中间省略文本。而且指定了 android:textAllCaps = “true”,表明该文本框的所有字母大写。
第 3 个TextView 指定 android:autoLink = “email|phone”,这就指定了该文本框会自动为文本框内的 E-mail 地址、电话号码添加超链接。
第 4 个TextView 指定一系列 android:shadowXXX 属性,这就为该文本框内的文本内容添加阴影。
第 5 个TextView 指定 android:password = “true”,这就指定了该文本框会用点来代替现实所有字符。
第 6 个 CheckedTextView 指定 android:checkMark = “@drawable/ok”,这就指定了该可勾选文本框的勾选图标。**
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="带边框的文本"
android:textSize="24pt"
android:background="@drawable/bg_border"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="圆角边框、渐变背景的文本"
android:textSize="24pt"
android:background="@drawable/bg_border2"/>
LinearLayout>
程序清单:bg_border.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#0000"/>
<stroke android:width="4px" android:color="#f00" />
shape>
程序清单:bg_border2.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:topLeftRadius="20px"
android:topRightRadius="5px"
android:bottomRightRadius="20px"
android:bottomLeftRadius="5px"/>
<stroke android:width="4px" android:color="#f0f" />
<gradient android:startColor="#f00"
android:centerColor="#0f0"
android:endColor="#00f"
android:type="sweep"/>
shape>
EditText 组件最重要的属性是 inputType,该属性用于将EditText 设置为指定类型的输入组件。EditText 还派生了如下两个子类。
1.AutoCompleteTextView:带有自动完成功能的 EditText。
2.ExtractEditText:它并不是 UI 组件,而是 EditText 组件的底层服务类,负责提供全屏输入法支持。
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="用户名:"
android:textSize="16sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请填写登录账号"
android:selectAllOnFocus="true"/>
TableRow>
<TableRow>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="密码:"
android:textSize="16sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberPassword"/>
TableRow>
<TableRow>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="年龄:"
android:textSize="16sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"/>
TableRow>
<TableRow>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="生日:"
android:textSize="16sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="date"/>
TableRow>
<TableRow>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="电话号码:"
android:textSize="16sp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请填写您的电话号码"
android:selectAllOnFocus="true"
android:inputType="phone"/>
TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册"/>
TableLayout>
第一个输入框通过 android:hint 指定了文本框的提示信息:请填写登录账号–这是该文本框默认的提示。
第二个输入框通过 android:inputType = “numberPassword” 设置这是一个密码框,而且只能接受数字密码,用户在该文本框输入的字符会以点号代替。
第三个输入框通过 android:inputType = “number” 设置为只能接受数值的输入框。
第四个输入框通过 android:inputType = “date” 指定它是一个日期输入框。
第五个输入框通过 android:inputType = “phone” 设置为一个电话号码输入框。
Button继承了 TextView ,当用户单击按钮时,按钮会触发一个onClick事件。可以通过指定 android:background熟悉ing为按钮增加背景颜色或背景图片。
为了定义图片随用户动作改变的按钮,可以考虑使用XML 资源文件来定义 Drawable 对象,再将 Drawable 对象设为 Button 的 android:background 属性值,或设为 ImageButton 的android:src 属性值。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="文字带阴影的按钮"
android:textSize="12pt"
android:shadowColor="#aa5"
android:shadowRadius="1"
android:shadowDx="5"
android:shadowDy="5"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/red"
android:text="普通按钮"
android:textSize="10pt"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_selector"
android:textSize="11px"
android:text="带文字的图片按钮"/>
LinearLayout>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/red"
/>
<item android:state_pressed="false"
android:drawable="@drawable/purple"
/>
selector>
单选框(RadioButton)、复选框(CheckBox)、状态开关按钮(ToggleButton)和开关(Switch)是用户界面最普通的 UI 组件,它们都继承了 Button 类,因此都可以直接使用 Button 支持的各种属性和方法。
RadioButton、CheckBox 与普通按钮不同的是,它们多了一个可选中的功能,因此RadioButton、CheckBox 都可额外指定一个 android:checked 属性,该属性用于指定 RadioButton、CheckBox 初始时是否被选中。
RadioButton 与 CheckBox 的不同之处在于,一组 RadioButton 只能选中其中一个,因此 RadioButton 通常要与RadioGroup一起使用,用于定义一组单选钮。
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别:"/>
<RadioGroup android:id="@+id/rg"
android:orientation="horizontal"
android:layout_gravity="center_horizontal">
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/male"
android:text="男"
android:checked="true"/>
<RadioButton android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/female"
android:text="女"/>
RadioGroup>
TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="喜欢的颜色:"/>
<LinearLayout android:layout_gravity="center_horizontal"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="红色"
android:checked="true"/>
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蓝色"/>
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="绿色"/>
LinearLayout>
TableRow>
<TextView
android:id="@+id/show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
TableLayout>
如果在 XML 布局文件中默认勾选了某个单选钮,则必须为该组单选钮的每个按钮指定 android:id 属性值;否则这组单选钮不能正常工作。
public class MainActivity extends Activity
{
RadioGroup rg;
TextView show;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取界面上rg、show两个组件
rg = (RadioGroup) findViewById(R.id.rg);
show = (TextView) findViewById(R.id.show);
// 为RadioGroup组件的OnCheckedChange事件绑定事件监听器
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
// 根据用户勾选的单选按钮来动态改变tip字符串的值
String tip = checkedId == R.id.male ?
"您的性别是男人": "您的性别是女人";
// 修改show组件中的文本
show.setText(tip);
}
});
}
}
状态开关按钮(ToggleButton) 和开关(Switch) 也是由 Button 派生出来的,因此它们的本质也是按钮,Button 支持的各种属性、方法也适用于 ToggleButton 和 Switch 。从功能上来看,ToggleButton、Switch 与 CheckBox 复选框非常相似,它们都可以提供两种状态。不过 ToggleButton、Switch 与 CheckBox 的区别主要体现在功能上,ToggleButton、Switch 通常用于切换程序中的某种状态。
XML 属性 | 相关方法 | 说 明 |
---|---|---|
android:checked | setChecked(boolean) | 设置该按钮是否被选中 |
android:textOff | 设置当该按钮的状态关闭时显示的文本 | |
android:textOn | 设置当该按钮的状态打开时显示的文本 |
XML 属性 | 相关方法 | 说 明 |
---|---|---|
android:checked | setChecked(boolean) | 设置该开关是否被选中 |
android:switchMinWidth | setSwitchMinWidth(int) | 设置该开关的最小宽度 |
android:switchPadding | setSwitchPadding(int) | 设置该开关与标题文本之间的空白 |
android:switchTextAppearance | setSwitchTextAppearance(Context,int) | 设置该开关图标上的文本样式 |
android:textOff | setTextOff(CharSequence) | 设置该开关的状态关闭时显示的文本 |
android:textOn | setTextOn(CharSequence) | 设置该开关的状态打开时显示的文本 |
android:textStyle | setSwitchTypeface(Typeface) | 设置该开关的文本风格 |
android:thumb | setThumbResource(int) | 指定使用自定义 Drawable 绘制该开关的开关按钮 |
android:track | setTrackResource(int) | 指定使用自定义的Drawable 绘制该开关的开关轨道 |
android:typeface | setSwitchTypeface(Typeface) | 设置该开关的文本的字体风格 |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ToggleButton android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="横向排列"
android:textOn="纵向排列"
android:checked="true"/>
<Switch android:id="@+id/switcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="横向排列"
android:textOn="纵向排列"
android:thumb="@drawable/check"
android:checked="true"/>
<LinearLayout android:id="@+id/test"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试按钮一"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试按钮二"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试按钮三"
/>
LinearLayout>
LinearLayout>
public class MainActivity extends Activity
{
ToggleButton toggle;
Switch switcher;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
toggle = (ToggleButton)findViewById(R.id.toggle);
switcher = (Switch)findViewById(R.id.switcher);
final LinearLayout test = (LinearLayout)findViewById(R.id.test);
OnCheckedChangeListener listener = new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton button
, boolean isChecked)
{
if(isChecked)
{
// 设置LinearLayout垂直布局
test.setOrientation(1);
toggle.setChecked(true);
switcher.setChecked(true);
}
else
{
// 设置LinearLayout水平布局
test.setOrientation(0);
toggle.setChecked(false);
switcher.setChecked(false);
}
}
};
toggle.setOnCheckedChangeListener(listener);
switcher.setOnCheckedChangeListener(listener);
}
}
TextClock 能以 24 小时制 或 12 小时制来显示时间,而且可以由程序员来指定时间格式。
XML 属性 | 相关方法 | 说 明 |
---|---|---|
android:format12Hour | setFormat12Hour(CharSequence) | 设置该时钟的12小时制的格式字符串 |
android:format24Hour | setFormat24Hour(CharSequence) | 设置该时钟的24小时的格式字符串 |
android:timeZone | setTimeZone(String) | 设置该时钟的时区 |
AnalogClock 则继承了 View 组件,它重写了 View 的 OnDraw 方法,它会在 View 上绘制模拟时钟。
XML 属性 | 说明 |
---|---|
android:dial | 设置该模拟时钟的表盘使用的图片 |
android:hand_hour | 设置该模拟时钟的时针使用的图片 |
android:hand_minute | 设置该模拟时钟的分针使用的图片 |
TextClock 和 AnalogClock 都会显示当前时间。不同的是,TextClock 显示数字时钟,可以显示当前的秒数;AnalogClock 显示模拟时钟,不会显示当前的秒数。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10pt"
android:textColor="#f0f"
android:format12Hour="yyyy年MM月dd日 H:mma EEEE"
android:drawableEnd="@drawable/ic_launcher"/>
<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:dial="@drawable/watch"
android:hand_minute="@drawable/hand"/>
LinearLayout>
Chronometer 的用法也很简单,它只提供了一个 android:format 属性,用于指定计时器的记时格式。除此之外,Chronometer 还支持如下常用方法。
1.setBase(long base): 设置计时器的起始时间。
2.setFormat(String format): 设置显示时间的格式。
3.start(): 开始计时。
4.stop(): 停止计时。
5.setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener); 为计时器绑定时间监听器, 当计时器改变时触发该监听器。
package org.yonga.ui;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import static android.widget.Chronometer.OnChronometerTickListener;
public class MainActivity extends Activity
{
Chronometer ch;
Button start;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取计时器组件
ch = (Chronometer) findViewById(R.id.test);
// 获取“开始”按钮
start = (Button) findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View source)
{
// 设置开始计时时间
ch.setBase(SystemClock.elapsedRealtime());
// 启动计时器
ch.start();
start.setEnabled(false);
}
});
// 为Chronometer绑定事件监听器
ch.setOnChronometerTickListener(new OnChronometerTickListener()
{
@Override
public void onChronometerTick(Chronometer ch)
{
// 如果从开始计时到现在超过了20s
if (SystemClock.elapsedRealtime() - ch.getBase() > 20 * 1000)
{
ch.stop();
start.setEnabled(true);
}
}
});
}
}