基本组件
1. 文本框与编辑框
1.1 简介
Android 的人工交互界面由好多组件组成,Android 中提供了两种文本组件,文本框(TextView)和编辑框(EditText),文本框用于显示文本,编辑框用于显示可编辑的文本框,接受用户输入的信息,文本框相当于 Java GUI 中的 Jlable 组件,但是 Android 中的文本框可以显示单行、多行、带图片的文本
。EditText 是 TextView 类的子类,同时,Android 中的编辑框可输入单行、多行、指定格式文本
1.2 实现方式
1.2.1 在 XML 布局文件中定义文本框和编辑框(推荐使用)
1.2.1.1 文本框
<TextView
属性列表
>
</TextView>
常用属性列表:
android:text="" 指定需要显示的文本,值可以为字符串资源,也可以为字符串
android:textColor="" 文本框中文本颜色
android:textSize="" 文本框中字体大小
android:height="" 文本高度,值以像素为单位
android:width="" 文本宽度,值以像素为单位
android:gravity="left" 文本框内文本对齐方式
android:autoLink="email" 为文本框中 email 添加超链接
android:drawableTop="" 显示图片的文本框,值为图片资源文件
特殊属性列表:
android:singleLine="true" 默认为多行文本框,如果需要使用单行文本框,则需要通过该属性进行设置,超出的部分被省略掉,并用 ... 表示
1.2.1.2 编辑框
<EditText
属性列表
>
</EditText>
特殊属性列表:
android:inputType="" 指定编辑框输入类型,值可以为 textPassword(密码框,掩码形式显示)、textEmailAddress(email 地址框)
android:hint="" 当文本框内容为空时,文本框中提示的文本
1.2.2 使用 Java 代码创建文本框和编辑框
使用Java代码获取编辑框输入的内容
编辑框中输入的内容可以通过 Java 代码来使用编辑框的 getText 方法获取,如果想获取字符串,则需要再次调用 toString 方法,具体代码如下:
EditText et = (EditText)findViewById(R.id.编辑框 ID);
String str = et.getText().toString();
2. 普通按钮与图片按钮
2.1 简介
Android 中提供了两种按钮组件,普通按钮和图片按钮。这两种按钮都是用于在 UI 界面上生成一个可以单击的按钮。当用户单击按钮时,将会触发一个 onClick 事件,可以通过为按钮添加单击事件监听器指定要触发的动作。
2.2 实现方式
2.2.1 在 XML 布局文件中定义普通按钮和图片按钮(推荐使用)
2.2.1.1 普通按钮
<Button
属性列表
>
</Button>
特殊属性列表:
android:onClick="" 指定单击按钮触发的具体事件,值为方法名
2.2.1.1.1 为普通按钮添加单击事件监听器
2.2.1.1.1.1 在 Activity 重写的 onCrete 方法中
代码实现如下:
Button button = (Button)findViewById(R.id.普通按钮 ID);
button.setOnClickListener(new View.OnClickListener(){
@override
public void onClick(View v){
//编写要执行的代码
}
});
2.2.1.1.1.2 Java 代码与 XML 文件混合实现
这种情况下只需要在 Activity 中自定义新的单击按钮具体执行的内容方法
Java 代码如下:
public void myClick(View view){
//编写要执行的代码
}
XML 文件部分通过使用<Button>
标签的 android:onClick="方法名"
实现,即直接在标签中调用方法,注意不需要指定参数
2.2.1.2 图片按钮
图片按钮背景默认灰色
<ImageButton
属性列表
>
</ImageButton>
特殊属性列表:
android:src="" 指定图片路径,值为图片资源文件
android:background="#F000" 指定按钮背景色为透明,这样不会显示默认的灰色
2.2.1.2.1 为普通按钮添加单击事件监听器
2.2.1.1.1.1 在 Activity 重写的 onCrete 方法中
代码实现如下:
ImageButton button = (ImageButton)findViewById(R.id.图片按钮 ID);
button.setOnClickListener(new View.OnClickListener(){
@override
public void onClick(View v){
//编写要执行的代码
}
});
2.2.1.1.1.2 Java 代码与 XML 文件混合实现
这种情况下只需要在 Activity 中自定义新的单击按钮具体执行的内容方法
Java 代码如下:
public void myClick(View view){
//编写要执行的代码
}
2.2.2 使用 Java 代码创建普通按钮和图片按钮
3. 单选按钮与复选按钮
3.1 简介
单选按钮和复选按钮都是 Button 的子类,与普通按钮不同,这两种按钮都提供了可以选中的功能,单选按钮默认
的情况下,显示圆形图标
,复选按钮默认
的情况下,显示方形图标
。单选按钮和复选按钮并不仅仅包含一个按钮,还包括显示在按钮旁边的文本。
3.2 实现方式
3.2.1 单选按钮
<RadioButton
属性列表
>
</RadioButton>
特殊属性列表:
android:text="" 指定单选按钮旁边的显示文本
android:checked="true|false" 设置单选按钮初始状态是否被选中
单选按钮使用时,通常不会单独使用,而是放到单选按钮组中使用
<RadioGroup
属性列表
>
<!-- 添加多个 RadioButton 组件>
</RadioGroup>
特殊属性列表:
android:orientation="horizontal" 用于指定内部组件排列方向,水平或垂直
3.2.1.1 改变单选按钮组的值时获取选中项的值
在 Activity 中重写的 onCreate 方法使用如下代码:
RadioGroup sex = (RadioGroup)findViewById(R.id.单选按钮组 ID)
sex.setOnCheckedChangeListener(new setOnCheckedChangeListener(){
@Override
public void setOnCheckedChanged(RadioGroup group, int checkedId){
RadioButton r = (RadioButton)findViewById(checkedId)
r.getText()
}
});
3.2.1.2 单击其他按钮时获取选中项的值
其他按钮以提交按钮为例,实现如下:
Button button = (Button)findViewById(R.id.提交单选按钮 ID)
//为提交按钮添加单击事件监听
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
//通过 for 循环遍历单选按钮组
for(int i = 0;i<单选按钮组对象.getChildCount();i++){
RadioButton r = (RadioButton)sex.getChildAt(i);
if(r.isChecked()){//判断单选按钮是否被选中
Log.i(r.getText());//在日志中记录接收到的信息
break;
}
}
}
});
3.2.2 复选按钮
<CheckBox
属性列表
>
</CheckBox>
3.2.2.1 获取复选框中的值
每一个复选按钮都需要添加状态改变事件监听器
CheckBox like1 = (CheckBox)findViewById(R.id.复选按钮 ID);
like1.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
if(isChecked){
like1.getText();
}
}
});
4. 图像视图
4.1 简介
可以将要显示的图片放置在 res/drawable 目录中。
4.2 实现方式
<ImageView
属性列表
>
</ImageView>
常用属性列表:
注:使用 maxHeight 和 maxWidth 属性时,必须设置 adjustViewBounds 属性值为 true,否则这两个属性不起作用
5. 列表选择框
5.1 简介
Android 中的列表选择框相当于网页中常见的下拉列表框,通常用于提供一系列可选择的列表项,供用户进行选择。
5.2 实现方式
<Spinner
属性列表
>
</Spinner>
常用属性列表:
android:prompt="@string" 指定列表选择框的标题,值为字符串资源,为可选属性
android:entries="@array" 指定列表选择框的列表项,值为数组资源,为可选属性
5.3 使用 Java 代码获取列表选择框的选中值
代码实现:
Spinner spinner = (Spinner)findViewById(R.id.列表选择框 ID);
spinner.getSelectedItem();
为列表选择框添加选择列表项事件监听器:
spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3){
//选中值后获取选中值并记录到日志面板
String result = arg0.getItemAtPosition(arg2).toString();
Log.i("示例", result);
}
@Override
public void onNothingSelected(AdapterView<?> arg0){
}
})
5.4 通过适配器为列表选择框指定列表项
列表项可知的情况下,可通过数组资源文件指定列表项,而列表项不知道的情况下,只能通过适配器指定列表项。
实现步骤如下:
- 创建一个适配器对象,通常使用 ArrayAdapter 类。在 Android 中,创建适配器,通常有以下两种情况,一种是通过
数组资源文件
创建,一种是通过在 Java 文件中使用字符串数组
创建。
//通过数组资源文件创建适配器
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.数组资源名, android.R.layout.simple_dropdown_item_1line);
//通过字符串数组创建适配器
String[] ctype = new String[]("身份证", "学生证", "军人证");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ctype);
- 为适配器设置列表选择框下拉时的选项样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- 将适配器与列表选择框关联
spinner.setAdapter(adapter);
6. 列表视图
6.1 简介
Android 中最常用的一种视图组件,以垂直列表的形式列出需要显示的列表项,如显示系统设置项或者功能内容列表等。
6.2 实现方式
6.2.1 使用 XML 文件实现
<ListView
属性列表
>
</ListView>
常用属性列表:
android:entries="@array" 为列表视图指定显示的列表项
android:divider="@drawable" 使用图片资源作为分隔条
android:dividerHeight="3px" 指定分隔条的高度
android:footerDividersEnabled="false" 指定在 footer view 前不绘制分隔条
android:headerDividersEnabled="false" 指定在 header view 后不绘制分隔条
6.2.1.1 通过适配器为列表视图指定列表项
- 创建一个适配器对象
//通过数组资源文件创建适配器
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.数组资源名, android.R.layout.simple_list_item_checked);
//列表项的外观形式
//simple_list_item_checked 每一个列表项都有一个已经勾选的列表项
//simple_list_item_1 每一个列表项都是一个普通的文本
//simple_list_item_2 每一个列表项都是一个普通的文本,字体略大
//simple_list_item_multiple_choice 每一个列表项都是带多选框的文本
//通过字符串数组创建适配器
String[] ctype = new String[]("身份证", "学生证", "军人证");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, ctype);
- 将适配器与列表视图关联
ListView listView = (ListView)findViewById(R.id.列表视图 ID);
listView.setAdapter(adapter);
6.2.1.2 为列表视图添加头视图和脚视图
//首先定义一个方法
View line(){
ImageView image = new ImageView(this);
Image.setImageResource(R.drawable.图片资源);
return image;
}
//添加头视图
listView.addHeaderView(line());
//添加脚视图
listView.addFooterView(line());
6.2.1.3 选项被单击的事件监听器
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View arg1, int pos, long id){
//获取选项的值
String result = parent.getItemAtPosition(pos).toString();
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
}
});
6.2.2 Activity 继承 ListActivity 实现
如果程序的窗口仅仅需要显示一个列表,可以直接让 Activity 继承 ListActivity 来实现,普通的 Activity 是继承于 Activity 的。继承了 ListActivity 的类中无需调用 setContentView 方法来显示页面,而是可以直接为其设置适配器,从而显示一个列表。
实现代码如下:
public class MainActivity extends ListActivity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
String[] ctype = new String[]("身份证", "学生证", "军人证");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
setListAdapter(adapter);
}
public void onListItemClick(ListView l, View v, int position, long id){
super.onListItemClick(l, v, position, id);
String result = l.getItemAtPosition(position).toString();
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
}
}
7. 日期、时间选择器
7.1 简介
为了能让用户选择日期和时间,Android 提供了日期、时间选择器,分别是 DatePicker 和 TimePicker 组件。
7.2 实现方式
//获取日期选择器和时间选择器
DatePicker datepicker = (DatePicker)findViewById(R.id.日期选择器 ID);
TimePicker timepicker = (TimePicker)findViewById(R.id.时间选择器 ID);
//设置时间选择器为 24 小时制
timepicker.setIs24HourView(true);
//创建日历对象
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR); //获取当前年份
month = calendar.get(Calendar.Month); //获取当前月份
day = calendar.get(Calendar.DAY_OF_MONTH); //获取当前天数
hour = calendar.get(Calendar.HOUR_OF_DAY); //获取当前小时数
minute = calendar.get(Calendar.MINUTE); //获取当前分钟数
//初始化时间选择器
timepicker.setCurrentHour(hour);
timepicker.setCurrentMinute(minute);
//初始化日期选择器,并在初始化时指定监听器,日期选择器对应的是 OnDateChangedListener
datepicker.init(year, month, day, new OnDateChangedListener(){
@Override
public void onDateChanged(DatePicker arg0, int year, int month, int day){
//改变 year 属性的值
MainActivity.this.year = year;
//改变 month 属性的值
MainActivity.this.month = month;
//改变 day 属性的值
MainActivity.this.day = day;
}
});
//为时间选择器指定监听器,时间选择器对应的是 OnTimeChangedListener
timepicker.setOnTimeChangedListener(new OnTimeChangedListener(){
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute){
//改变 hour 属性的值
MainActivity.this.hour = hourOfDay;
//改变 minute 属性的值
MainActivity.this.minute = minute;
}
});
8. 计时器
8.1 简介
计时器组件是一个可显示从某个起始时间开始,一共过去了多长时间的文本,使用 Chronometer 表示。由于该组件继承于 TextView,所以它将以文本的形式显示内容。
8.2 常用方法
setBase() //用于设置计时器的起始时间
setFormat() //用于设置显示时间的格式,默认以 MM:SS 格式显示分钟和秒
start() //用于指定开始计时
stop() //用于指定停止计时
setOnChronometerTickListener() //用于为计时器绑定事件监听器,当计时器改变时触发该监听器
8.3 实现方式
Chronometer ch = (Chronometer)findViewById(R.id.计时器 ID);
ch.setBase(SystemClock.elapsedRealtime());
ch.setFormat("已用时间:%s"); //设置显示格式
ch.start();
ch.setOnChronometerTickListener(new OnChronometerTickListener(){
@Override
public void onChronometerTick(Chronometer chronometer){
if(SystemClock.elapsedRealtime() - ch.getBase() >= 10000){
ch.stop();
}
}
});