【转】Pro Android学习笔记(二三):用户界面和控制(11):其他控件
Android提供了很多控件,基本上都是view的扩展。
Chronometer:计时器控件
Chronometer是一个计时器,提供开始计时,停止计时和复位等功能,它的实现很简单。小例子XML文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ….. >
<Chronometer android:id="@+id/ui_meter"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout …… android:orientation="horizontal">
<Button …… android:onClick="onMeterStart"/>
<Button …… android:onClick="onMeterStop" />
<Button …… android:onClick="onMeterReset" />
</LinearLayout>
</LinearLayout>
小例子的代码如下:
public class UiChronometerTest extends Activity{
private Chronometer chrono;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ui_chronometer);
chrono = (Chronometer)findViewById(R.id.ui_meter);
chrono.setFormat("计时器:%s"); //缺省情况,计时器显示为MM:SS,如果超过1小时则显示H:MM:SS。如果我们需要增加一些文字,可以用setFormat,或者在XML文件中用android:format来设置。setFormat中第一个%s是计时器,也就是MM:SS/H:MM:SS。在本例中,我们在前面加上“计时器:”几个字样。
/* // 系统会根据tick来触发计时器时间的变化, tick是系统计时,触发计时器变化,在此我们每个tick到了,我们加一行log,在模拟器中,间隔时间略大于1秒。一般来讲,我们无需特别处理,计时器会自动进行计时。
chrono.setOnChronometerTickListener(new OnChronometerTickListener() {
private int count = 0;
@Override
public void onChronometerTick(Chronometer meter) {
Log.d("wei","-- " + (count ++));
}
});*/
}
//按Start button触发函数
public void onMeterStart(View v){
chrono.setBase(SystemClock.elapsedRealtime()); //setBase是设置基准时间,计时器=当前时间-基准时间,本例将按Start的时间设置为基准时间,即计时器从0秒开始计数。
chrono.start(); //开始计数
}
//按Stop Button
public void onMeterStop(View v){
chrono.stop(); //停止计数
}
//按Reset Button
public void onMeterReset(View v){
chrono.setBase(SystemClock.elapsedRealtime()); //计时器reset,我们只要将基准时间设为当前时间,计数器就可以归零。
}
}
倒计时:CountDownTimer
CountDownTimer是android.os提供的一个类,它不是View,但是我们可以利用它实现与计时器相似的功能,实现一个20秒倒计时的小例子,XML如下:
<TextView android:id="@+id/countDownText"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout ...... android:orientation="horizontal">
<Button …… android:onClick="onCountDownStart" />
<Button …… android:onClick="onCountDownStop" />
</LinearLayout>
程序代码如下
private CountDownTimer countdownTimer = null;
private TextView tv = null;
private static final String pre = "20秒倒计时:";
protected void onCreate(Bundle savedInstanceState){
… …
tv = (TextView)findViewById(R.id.countDownText);
tv.setText(pre);
countdownTimer = new CountDownTimer(20000,100){ //构造函数的第一个参数long millisInFuture,本例为20秒,即20000毫秒,第二个参数long countDownInterval,间隔时间,本例以100ms为间隔。
public void onFinish() { //计时结束
tv.setText(pre + "0");
}
//如果在模拟器运行,Tick时间间隔为1秒,即便我们设置100ms,仍会按最小间隔1秒来运行。每当tick到了,我们刷新显示时间
public void onTick(long millisUntilFinished) {
float remainTime = millisUntilFinished/1000;
tv.setText(String.format("%s%.1f", pre,remainTime));
}
};
}
public void onCountDownStart(View v){
countdownTimer.start(); //开始倒计时
tv.setText(pre+"20");
}
public void onCountDownStop(View v){
countdownTimer.cancel(); //取消倒计时
}
Switch控件
Switch控件是Android 4.0新加入的控件。只有两个状态,和ToggleButton类似,如图所示,下面是小例子的XML文件。
<Switch android:id="@+id/ui_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="On"
android:textOff="Off"/>
代码如下:
Switch sw = (Switch) findViewById(R.id.ui_switch);
sw.setChecked(true); //缺省是false
//设置状态改变的回调函数
sw.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d("Wei","set to " + (isChecked ? "On" : "Off"));
}
});
Space控件
Space控件是在Android 4.0中加入,是个空白的view,用于进行分隔。我们在组件中加入一下XML代码,布局上下隔出20dip的空隙。
<Space android:layout_width="wrap_content"
android:layout_height="20dip" />
其他控件
ScollView可参考Android学习笔记(十):Activity-TableLayout和ScrollView。
ProgressBar、SeekBar可参考Android学习笔记(十六):Widget-进度条。
RatingBar可参考Android学习笔记(十八):ListView和RatingBar。
WebView可参见Android学习笔记(二九):嵌入浏览器。
相关链接: 我的Android开发相关文章
【转】Pro Android学习笔记(二三):用户界面和控制(11):其他控件的更多相关文章
- 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout
目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
- 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView
目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
随机推荐
- 我的Android进阶之旅------>解决 Error: ShouldNotReachHere() 问题
在Android项目中创建一个包含main()方法的类,直接右键运行该类时会报如下错误: # # An unexpected error has been detected by Java Runti ...
- 2.Django命令行工具搭建项目(django-admin.py & manage.py)
1.概念: django-admin.py是django的用于管理任务的命令行工具 manage.py是对django-admin.py的简单包装,每个project里会有一个自己的manage.py ...
- activiti基础--3-----------------------------流程实例
一.流程实例用到的表: select * from act_ru_execution #正在执行的任务表 select * from act_hi_procinst #流程实例的历史表 select ...
- 阿里云修改centos7主机名
为了玩Docker,买个阿里云主机也是够拼的了. [root@iZ284olvkmjZ ~]# 不过主机名中怎么好DT,无奈,修改. 我们需要的是永久生效,阿里云提供了两种方法: 方法(1). 输入h ...
- Python OOP(2)-static method,class method and instance method
静态方法(Static Method): 一种简单函数,符合以下要求: 1.嵌套在类中. 2.没有self参数. 特点: 1.类调用.实例调用,静态方法都不会接受自动的self参数. 2.会记录所有实 ...
- Javamail 发送附件中文名过长以及乱码问题
最近在弄javamail发送邮件当邮件里含有附件并且附件是中文的时候发送后就会出现乱码!! 通过javax.mail.internet.MimeUtility.encodeText()就可解决这个 ...
- c的详细学习(2)数据类型,运算符与表达式
本节用来介绍c语言中的数据类型和运算符. (1)c语言的基本符号: 任何一种基本语言都有自己的基本词汇表.c语言的基本词汇表有一下几部分: *数字10个: *英文字母:大小 ...
- spring-cloud 实现更新配置不用重启服务 @FreshScope
继续前面搭建的spring cloud. 这里是基于rabbitMQ搭建的,首先需要在电脑上安装rabbitMQ. 在client端和server端分别加上如下依赖 compile group: 'o ...
- 【leetcode刷题笔记】Unique Paths II
Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...
- STM32 HAL SPI读取MPU6500的设备ID异常
1.问题背景 近前,使用STM32F4 HAL库的SPI读取MPU6500出现异常. 现象:读取ID失败,返回0,以为硬件焊接问题,各种排查,最后为了示波器测试方便,把读取ID的函数放到While(1 ...