女儿情口琴简谱:第十讲:用户界面 View(五)
来源:百度文库 编辑:偶看新闻 时间:2024/05/03 09:49:09
第十讲:用户界面 View(五)
本讲内容:Spinner,AutoCompleteTextView,DatePicker,TimePicker
点此下载:Android学习指南第十讲源代码
七、Spinner 下拉列表
spinner就相当于Html中的下拉列表框,在下面的例子里我们共同学习一下spinner的使用。在这一小节,让我们建一个小关于色彩的下拉列表,当某一个选项被选择时,弹出一个吐司消息。
1、建一个新的项目,打开res/values/strings.xml文件,写入如下代码:
view sourceprint?01
< ?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
resources
>
03
<
string
name
=
"app_name"
>MainHelloSpinner
string
>
04
<
string
name
=
"color"
>选择色彩:
string
>
05
<
string
name
=
"colors"
-array
=
""
>
06
<
item
>黑色 | Black
item
>
07
<
item
>蓝色 | Blue
item
>
08
<
item
>棕色 | Brown
item
>
09
<
item
>绿色 | Green
item
>
10
<
item
>灰色 | Grey
item
>
11
<
item
>粉色 | Pink
item
>
12
<
item
>紫色 | Purple
item
>
13
<
item
>红色 | Red
item
>
14
<
item
>白色 | White
item
>
15
<
item
>黄色 | Yellow
item
>
16
string
>
17
resources
>
2、打开res/layout/main.xml 写入如下内容:
view sourceprint?1
< ?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
linearlayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:orientation
=
"vertical"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:padding
=
"10dip"
>
3
<
textview
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"@string/color"
android:layout_marginTop
=
"10dip"
>
4
<
spinner
android:id
=
"@+id/spinner"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:prompt
=
"@string/color"
>
5
spinner
>
textview
>
linearlayout
>
3、打开MainHelloSpinner.java 写入下内容:
view sourceprint?01
package
android.basic.lesson10;
02
03
import
android.app.Activity;
04
import
android.os.Bundle;
05
import
android.view.View;
06
import
android.widget.AdapterView;
07
import
android.widget.AdapterView.OnItemSelectedListener;
08
import
android.widget.ArrayAdapter;
09
import
android.widget.Spinner;
10
import
android.widget.Toast;
11
12
public
class
MainHelloSpinner
extends
Activity {
13
/** Called when the activity is first created. */
14
@Override
15
public
void
onCreate(Bundle savedInstanceState) {
16
super
.onCreate(savedInstanceState);
17
setContentView(R.layout.main);
18
19
//找到Xml中定义的下拉列表
20
Spinner spinner = (Spinner)findViewById(R.id.spinner);
21
//准备一个数组适配器
22
ArrayAdapter adapter = ArrayAdapter.createFromResource(
23
this
, R.array.colors, android.R.layout.simple_spinner_item);
24
//设置下拉样式
25
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
26
//为下拉列表设置适配器
27
spinner.setAdapter(adapter);
28
29
//定义子元素选择监听器
30
OnItemSelectedListener oisl=
new
OnItemSelectedListener() {
31
32
@Override
33
public
void
onItemSelected(AdapterView> parent, View view,
34
int
position,
long
id) {
35
Toast.makeText(MainHelloSpinner.
this
,
"选择的色彩: "
+
36
parent.getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
37
38
}
39
40
@Override
41
public
void
onNothingSelected(AdapterView> parent) {
42
}
43
};
44
//为下拉列表绑定事件监听器
45
spinner.setOnItemSelectedListener(oisl);
46
}
47
}
4、运行程序:
八、AutoCompleteTextView 自动完成文本框
AutoCompleteTextView和EditText一样都可以输入文本。但它可以和适配器绑定,当用户输入两个及以上字符时,系统将根据适配器提供的内容,进行文本的自动匹配提示。这个Web开发中Ajax里的一个标志性的功能,现在被Android弄成了一个标准组件。下面我们通过一个例子来学习一下:
1、建一个新的项目,打开res/values/strings.xml文件,写入如下代码:
view sourceprint?01
< ?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
resources
>
03
<
string
name
=
"app_name"
>HelloAutoCompleteTextView
string
>
04
<
string
name
=
"province"
-array
=
""
>
05
<
item
>shan dong
item
>
06
<
item
>jiang su
item
>
07
<
item
>an hui
item
>
08
<
item
>zhe jiang
item
>
09
<
item
>fu jian
item
>
10
<
item
>shang hai
item
>
11
<
item
>guang dong
item
>
12
<
item
>guang xi
item
>
13
<
item
>hai nan
item
>
14
<
item
>hu bei
item
>
15
<
item
>hu nan
item
>
16
<
item
>he nan
item
>
17
<
item
>jiang xi
item
>
18
<
item
>bei jing
item
>
19
<
item
>tian jin
item
>
20
<
item
>he bei
item
>
21
<
item
>shan xi
item
>
22
<
item
>nei meng gu
item
>
23
<
item
>ning xia
item
>
24
<
item
>xin jiang
item
>
25
<
item
>qing hai
item
>
26
<
item
>shan xi
item
>
27
<
item
>gan su
item
>
28
<
item
>si chuan
item
>
29
<
item
>yun nan
item
>
30
<
item
>gui zhou
item
>
31
<
item
>xi zang
item
>
32
<
item
>chong qing
item
>
33
<
item
>liao ning
item
>
34
<
item
>ji lin
item
>
35
<
item
>hei long jiang
item
>
36
<
item
>tai wan
item
>
37
<
item
>xiang guang
item
>
38
<
item
>ao men
item
>
39
<
item
>山东
item
>
40
<
item
>江苏
item
>
41
<
item
>安徽
item
>
42
<
item
>浙江
item
>
43
<
item
>福建
item
>
44
<
item
>上海
item
>
45
<
item
>广东
item
>
46
<
item
>广西
item
>
47
<
item
>海南
item
>
48
<
item
>湖北
item
>
49
<
item
>湖南
item
>
50
<
item
>河南
item
>
51
<
item
>江西
item
>
52
<
item
>北京
item
>
53
<
item
>天津
item
>
54
<
item
>河北
item
>
55
<
item
>山西
item
>
56
<
item
>内蒙古
item
>
57
<
item
>宁夏
item
>
58
<
item
>新疆
item
>
59
<
item
>青海
item
>
60
<
item
>陕西
item
>
61
<
item
>甘肃
item
>
62
<
item
>四川
item
>
63
<
item
>云南
item
>
64
<
item
>贵州
item
>
65
<
item
>西藏
item
>
66
<
item
>重庆
item
>
67
<
item
>辽宁
item
>
68
<
item
>吉林
item
>
69
<
item
>黑龙江
item
>
70
<
item
>台湾
item
>
71
<
item
>香港
item
>
72
<
item
>澳门
item
>
73
string
>
74
resources
>
2、打开res/layout/main.xml 写入如下内容:
view sourceprint?1
< ?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
linearlayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:orientation
=
"vertical"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
>
3
<
textview
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"省份:"
>
4
5
<
autocompletetextview
android:id
=
"@+id/AutoCompleteTextView01"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:completionThreshold
=
"1"
android:hint
=
"请输入省份"
>
6
autocompletetextview
>
7
textview
>
linearlayout
>
3、打开MainHelloAutoCompleteTextView.java 写入下内容:
view sourceprint?01
package
android.basic.lesson10;
02
03
import
android.app.Activity;
04
import
android.os.Bundle;
05
import
android.widget.ArrayAdapter;
06
import
android.widget.AutoCompleteTextView;
07
08
public
class
MainHelloAutoCompleteTextView
extends
Activity {
09
/** Called when the activity is first created. */
10
@Override
11
public
void
onCreate(Bundle savedInstanceState) {
12
super
.onCreate(savedInstanceState);
13
setContentView(R.layout.main);
14
15
//定义数组
16
String[] province = getResources().getStringArray(R.array.province);
17
18
//定义数组适配器
19
ArrayAdapter adapter =
new
ArrayAdapter(
this
, R.layout.list_item, province);
20
21
//找到自动完成组件
22
AutoCompleteTextView atv = (AutoCompleteTextView) findViewById(R.id.AutoCompleteTextView01);
23
24
//为其设置适配器
25
atv.setAdapter(adapter);
26
27
}
28
}
4、运行程序,在英文输入法下输入”h”看看效果,再切换到中文输入法下输入”河”看看效果:
这里留意一下,android:completionThreshold=”1″ 属性设置了一个阀值,规定用户打了多少字符之后才出现自动提示,默认值是2,我们在这里改成了1。
九、DatePicker 日期选择控件 DatePickerDialog 日期选择对话框
日期选择的对话框漂亮,我们用一个例子演示一下:
1、main.xml的代码:
view sourceprint?1
< ?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
2
<
linearlayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:orientation
=
"vertical"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
>
3
<
textview
android:id
=
"@+id/dateDisplay"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:textsize
=
"20sp"
>
4
textview
>
5
<
button
android:id
=
"@+id/pickDate"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"改变日期"
android:textsize
=
"20sp"
>
6
button
>
7
linearlayout
>
其中文本框用来显示时间,按钮为了触发日期选择对话框,当然用其他组件来触发日期选择对话框也是的。
2、java代码:
view sourceprint?01
package
android.basic.lesson10;
02
03
import
java.util.Calendar;
04
05
import
android.app.Activity;
06
import
android.app.DatePickerDialog;
07
import
android.app.DatePickerDialog.OnDateSetListener;
08
import
android.app.Dialog;
09
import
android.os.Bundle;
10
import
android.view.View;
11
import
android.widget.Button;
12
import
android.widget.DatePicker;
13
import
android.widget.TextView;
14
15
public
class
MainHelloDatePicker
extends
Activity {
16
17
//准备公用属性
18
private
TextView dateDisplay;
19
private
Button pickDate;
20
private
int
mYear;
21
private
int
mMonth;
22
private
int
mDay;
23
24
//准备对话框Id
25
static
final
int
DATE_DIALOG_ID =
0
;
26
27
//准备日期设置监听器
28
private
OnDateSetListener dsl =
new
DatePickerDialog.OnDateSetListener(){
29
30
@Override
31
public
void
onDateSet(DatePicker view,
int
year,
int
monthOfYear,
32
int
dayOfMonth) {
33
mYear =year;
34
mMonth= monthOfYear;
35
mDay= dayOfMonth;
36
dateDisplay.setText(mYear+
"-"
+(mMonth+
1
)+
"-"
+mDay);
37
}
38
};
39
40
//重写创建对话框方法
41
@Override
42
protected
Dialog onCreateDialog(
int
id){
43
switch
(id){
44
case
DATE_DIALOG_ID:
45
//把Activity上下文、日期设置监听器、以及日期的年月日都作为参数传给那个新成立的对话框组件
46
return
new
DatePickerDialog(
this
, dsl, mYear, mMonth, mDay);
47
}
48
return
null
;
49
}
50
51
/** Called when the activity is first created. */
52
@Override
53
public
void
onCreate(Bundle savedInstanceState) {
54
super
.onCreate(savedInstanceState);
55
setContentView(R.layout.main);
56
57
//得到当前日期
58
final
Calendar c = Calendar.getInstance();
59
mYear = c.get(Calendar.YEAR);
60
mMonth = c.get(Calendar.MONTH);
61
mDay = c.get(Calendar.DAY_OF_MONTH);
62
63
//获取xml中的组件
64
dateDisplay= (TextView)findViewById(R.id.dateDisplay);
65
pickDate = (Button)findViewById(R.id.pickDate);
66
67
//给日期显示组件一个初始值
68
dateDisplay.setText(mYear+
"-"
+(mMonth+
1
)+
"-"
+mDay);
69
70
//给按钮绑定点击监听器
71
pickDate.setOnClickListener(
new
View.OnClickListener() {
72
public
void
onClick(View v) {
73
showDialog(DATE_DIALOG_ID);
74
}
75
});
76
}
77
}
3、运行程序
读者可以特别留意一下本节关于OnDateSetListener的代码,体会监听器的作用,有兴趣的同学可以看一下DatePickDialog和DatePick的源代码。
十、TimePicker 时间选择控件 和 TimePickerDialog 时间选择对话框
和上一小节的例子基本相同,就不举了。
本讲暂时就到这里。