Android 开发(三)基本组件

基本组件

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 通过适配器为列表选择框指定列表项

 列表项可知的情况下,可通过数组资源文件指定列表项,而列表项不知道的情况下,只能通过适配器指定列表项。
实现步骤如下:

  1. 创建一个适配器对象,通常使用 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);
  1. 为适配器设置列表选择框下拉时的选项样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  1. 将适配器与列表选择框关联
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 通过适配器为列表视图指定列表项

  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);
  1. 将适配器与列表视图关联
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();
		}
	}
});

其他文章

Android 开发(一)控制 UI 界面
Android 开发(二)布局管理器
Android 开发(三)基本组件

发布了15 篇原创文章 · 获赞 6 · 访问量 1290

猜你喜欢

转载自blog.csdn.net/qq_39100983/article/details/104799321
今日推荐