【android_温故知新】第 2 组 UI 组件:TextView及其子类

  • 文本框TextView的功能和用法
    • TextView 支持的 XML 属性及相关方法
    • 实例不同颜色字体带链接的文本
    • 实例圆角边框渐变背景的 TextView
  • EditText 的功能与用法
    • 实例用户友好的输入界面
  • 按钮Button组件的功能与用法
    • 实例按钮圆形按钮带文字的图片按钮
  • 单选钮RadioButton和复选框CheckBox的功能与用法
    • 实例利用单选钮复选框获取用户信息
    • 注意
  • 状态开关按钮ToggleButton和开关Switch的功能与用法
    • ToggleButton 支持的 XML 属性及相关方法
    • Switch 支持的 XML 属性及相关方法
    • 实例动态控制布局
  • 时钟AnalogClock 和 TextClock的功能与用法
    • TextClock 支持的 XML 属性及相关方法
    • AnalogClock 支持的 XML 属性
    • 实例手机里的劳力士
  • 计时器Chronometer

文本框(TextView)的功能和用法

TextView 支持的 XML 属性及相关方法

从功能上来看,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”,这就指定了该可勾选文本框的勾选图标。**

实例:圆角边框、渐变背景的 TextView


<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 的功能与用法

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)组件的功能与用法

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)的功能与用法

单选框(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)的功能与用法

状态开关按钮(ToggleButton) 和开关(Switch) 也是由 Button 派生出来的,因此它们的本质也是按钮,Button 支持的各种属性、方法也适用于 ToggleButton 和 Switch 。从功能上来看,ToggleButton、Switch 与 CheckBox 复选框非常相似,它们都可以提供两种状态。不过 ToggleButton、Switch 与 CheckBox 的区别主要体现在功能上,ToggleButton、Switch 通常用于切换程序中的某种状态。

ToggleButton 支持的 XML 属性及相关方法

XML 属性 相关方法 说 明
android:checked setChecked(boolean) 设置该按钮是否被选中
android:textOff 设置当该按钮的状态关闭时显示的文本
android:textOn 设置当该按钮的状态打开时显示的文本

Switch 支持的 XML 属性及相关方法

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);
    }
}

时钟(AnalogClock 和 TextClock)的功能与用法

TextClock 能以 24 小时制 或 12 小时制来显示时间,而且可以由程序员来指定时间格式。

TextClock 支持的 XML 属性及相关方法

XML 属性 相关方法 说 明
android:format12Hour setFormat12Hour(CharSequence) 设置该时钟的12小时制的格式字符串
android:format24Hour setFormat24Hour(CharSequence) 设置该时钟的24小时的格式字符串
android:timeZone setTimeZone(String) 设置该时钟的时区

AnalogClock 则继承了 View 组件,它重写了 View 的 OnDraw 方法,它会在 View 上绘制模拟时钟。

AnalogClock 支持的 XML 属性

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)

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);
                }
            }
        });
    }
}

你可能感兴趣的:(Android,基础笔记)