UI组件:
一、Toast:显示提示信息
1、显示文件内容:
Toast.makeText(context,"文本内容",时间).show();
时间:Toast.LENGTH_LONG 时间长一点
Toast.LENGTH_SHORT 时间短一点
Context:表示上下文对象,可以表示整个应用程序的上下文对象(应用程序级全局对象),也可以表示
一个界面的上下文对象(Activity)
2、显示图片
Toast t = new Toast(this); //创建Toast对象
ImageView view = new ImageView(this); //创建一个图片组件
view.setImageResource(R.mipmap.ic_launcher); //为图片组件设置图片资源
t.setView(view); //把图片组件设置到Toast组件上
t.setDuration(Toast.LENGTH_LONG);//设置显示的时间
t.show();//显示
3、显示图文
<1>创建 一个布局对象,用于组合多个组件,比如(LinearLayout)
<2>设置布局组件的相关属性(比如方向,内部组件显示的相对位置)
<3>创建需要添加到布局组件中的组件对象(ImageView 和 TextView)
<4>分别为组件对象设置内容(图片组件设置图片资源,文本组件设置文本内容)
<5>通过addView(...)方法把组件添加到布局组件中
<6>再把布局组件添加到Toast上,显示
通过这个示例,我们了解如何通过代码的方式组合组件,再显示到界面上
二、TextView组件
常用的属性设置:
android:textIsSelectable="true" 设置文本内容可选(触发系统的复制粘贴功能)
android:drawableLeft="@mipmap/ic_launcher" 设置文本内容的图标
其它包括drawableRight, drawableTop, drawableBottom, drawableStart, drawableEnd
android:text="Hello World!" 设置显示的文本内容
android:textColor="@color/colorAccent" 设置文本颜色
android:textSize="24sp" 设置文本字体大小
android:textStyle="bold" 设置字体的样式(bold 粗体,normal 默认, italic 斜体)
android:clickable="true" 是否可以单击
android:onClick="" 可单击的情况下,可以设置单击事件
android:ellipsize="marquee" 设置文本内容超出显示范围的显示方式
end, marquee, middle, none, start
android:lines="1" 设置显示的行数
android:maxLines="1" 最大的行数
android:minLines="1" 最小的行数
android:gravity 设置文本内容的位置
android:background="@color/colorPrimary" 设置背景颜色
三、EditText输入组件,是TextView的子类
用于接收输入文本内容
常用的属性:
android:hint="" 当输入框没有内容时显示提示信息
其它属性与TextView类同
两个事件监听:
1、输入变化的事件监听:
addTextChangedListener(new TextWatcher(){
beforeTextChanged 文本改变之前
onTextChanged 文本正在改变
afterTextChanged 文本改变之后
});
2、编辑完成的动作监听(回车符)
setOnEditorActionListener(new OnEditorActionListener(){
onEditorAction() 实现编辑完成后的动作(比如提交内容)
});
四、Button组件:按钮
通常使用Button组件的单击事件来提交数据,或触发某个操作
1、实现Button的事件监听的三种方式:
<1>通过实现监听器接口:View.OnClickListener,通常在Activity界面来实现(也可以是其他界面类)
实现事件的处理方法:onClick(View v),通过判断参数组件的ID,来确定用户操作的是哪个按钮
switch(v.getId()) 实现不同按钮的操作
为每个按钮添加事件处理(setOnClickListener(this))
在处理多个按钮事件时,建议使用(效果最高)
<2>使用匿名内部类直接给按钮设置事件监听
setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
//......
}
});
使用此方式的好处,代码集中简洁,少量时使用,由于使用匿名内部类会生成单独的类,所以会影响一定
的性能。
<3>在布局文件中使用属性自定义单击事件的方法
在布局文件中用 android:onClick="方法名"
在Activity类中自定义方法:public void 方法名(View v){},好处简洁,但是有一定限制
以上三种方法:最好是第一种
2、配置按钮的样式:
<1>配置透明的按钮样式
在配置布局文件中的按钮组件上使用style属性:
style="?android:attr/borderlessButtonStyle"
或者设置
background="@null"
<2>配置自定义按钮的样式:
使用selector(选择器)
在res/drawbale目录下创建一个配置文件,比如 button_bg.xml
在文件中:
然后在按钮的布局设置中使用background属性引用资源配置文件:
background="@drawable/button_bg"
五、ImageButton组件
与Button按钮类似,表示一个图片按钮
1、通过src属性指定按钮上显示的图片
src="@mipmap/ic_launcher"
也可以通过定义一个selector来设置图片选择器,比如在drawable/imagebutton_bg.xml
- android:drawable="@mipmap/de_btn_main_add_hover"/>
2、定义按钮的形状(可以应用在所有按钮上)
定义 drawable/button_shape.xml
android:shape="rectangle">
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
六、ImageView组件
表示显示一个图片的组件
通过src属性指定要显示的图片资源
显示图片时要注意,以适当的大小进行显示,如果一个界面中出现大量较大的图片(占内存),那么
会出现内存溢出的情况,所以以合适的大小显示合适的图片由为重要
以适合的方式显示图片:就要对图片进行缩放
<1>定义组件的大小,让图片适应组件的方式来进行按宽高比自动缩放显示
maxHeight 图片显示的最大高度
maxWidth 图片显示的最大宽度
adjustViewBounds 保正图片的宽高比例
该方法将按原图的比例进行缩放
<2>使用scaleType对图片进行缩放
matrix 用矩阵来绘制,动态缩小放大图片来显示
fitXY 把图片不按比例扩大/缩小到View的大小显示
fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置
fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示
fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置
center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示
centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)
centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或
小于View的长/宽
android:tint 将图片渲染成指定的颜色。
常用为:center、centerCrop
其它属性:
android:clickable="true" 是否可以单击,当该属性为true时,可以设置监听事件
注意:不要在小组件中显示大图片(图片组件的宽高小于图片本身的宽高)
七、CheckBox组件:复选框
用于提供多项选择
android:checked="true" 设置复选框是否默认选中
获取CheckBox组件的内容通常有两种方式:
<1>单获通过一个按钮的单击事件来检查CheckBox是否被选中
checkBox.isChecked() 判断是否为选中
再通过checkBox.getText().toString() 获取复选框的文本内容
checkBox.setChecked(boolean) 来设置是否选中
<2>通过给CheckBox组件添加CompoundButton.OnCheckedChangeListener事件
来监听复选框选中或取消选中的事件。
八、RadioButton和RadioGroup:单选按钮与分组
要想实现多个单选按钮互斥,需要把多个单选按钮放到一个RadioGroup分组内
可以为其中一个RadioButton设置为默认选中:checked="true"
RadioGroup中通过orientation属性设置水平或垂直排列
要想监听单选按钮的事件,可以通过实现RadioGroup.OnCheckedChangeListener接口
再通过radioGroup.findViewById(checkedId)获取当前被选中的RadioButton对象
再通过radioButton.getText()获取选中单选按钮的文本内容
或者通过一个按钮的单击事件来获取RadioButton的文本内容
使用RadioButton实现底部导航栏:
原理:利用RadioButton的互斥功能来实现底部导航菜单栏的功能
1、在界面底部使用RadioGroup组合多个RadioButton,并水平排列
2、设置RadioButton的相关属性来调整样式:
android:button="@null" 去除RadioButton的小圆圈
android:layout_weight="1" 平分多个RadioButton的位置
android:drawableTop="@drawable/..." 指定上方的图标
android:gravity="center" 居中显示
android:textColor="" 定义字体颜色
其中:drawableTop,textColor可以设置selector来改变选中与未选中的效果
九、ToggleButton、Switch:开关按钮
我们可以使用打关按钮来实现打开或关闭某一个功能的用户操作
textOn="打开" 按钮开启状态显示的文本
textOff="关闭" 按钮关闭状态显示的文本
在代码是通过isChecked方法来判断按钮的状态
监听开关按钮的事件:
setOnCheckedChangeListener()设置开关变化的事件
或者我们通过会使用单独的按钮进行统一的事件控制
十、RatingBar:评分条
可用于对用户、商品、用户体验等进行评分
<1>作为一个指示器,只提供查看
通过 android:isIndicator="true" 设置为指示器
<2>作为一个可与用户交互的评分
android:isIndicator="false" 默认值 用户可以点击
常用的属性:
android:numStars="5" 设置星的总数
android:stepSize="1" 设置步长(每次可以设置的递增值,可以是小数)
android:rating="3" 设置当前星数
事件监听:
当用户改变评分条的星数时,可以使用监听器接口:OnRatingBarChangeListener实现
ratingBar.setRating(4f);
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
//ratingBar 评分条组件
//rating 当前改变后的评分值
//fromUser 是否是用户操作
if(fromUser){//是否是用户操作
///
System.out.println("当前已经设置的星数,rating="+rating);
}
}
});
注意:使用评分条时宽度要使用wrap_content,否则星数量将不可控制,误导用户
使用自定义评分条:(项目中使用)
1、在drawable下定义一个配置文件:
layer-list 图层列表
- android:id="@android:id/background"
android:drawable="@mipmap/star_small_bg" />
- android:id="@android:id/progress"
android:drawable="@mipmap/star_small_hl" />
2、在style.xml文件中定义一个样式:
3、在布局文件中定义RatingBar组件
用style属性引用自定义的样式
style="@style/mySmallRatingBar"
十一、Spinner组件:下拉列表
通过提供一组选项数据,让用户选择
实现一个Spinner组件:
1、在布局文件中定义Spinner组件
android:width="wrap_content"
android:height="wrap_content"
android:id="@+id/spinner_city">
2、给Spinner下拉列表提供数据
<1>通过字符串数组资源文件定义
res/values/strings.xml文件中定义:
- 北京市
- 上海市
- 深圳市
- 武汉市
res/values/arrays.xml文件中定义:与strings.xml文件定义相同
<2>通过在代码中提供
通过是从其它地方获取数据(比如网络、数据库等)
3、利用一个适配器把数据填充到Spinner组件中
从资源文件中获取数据并创建一个适配器
ArrayAdapter adapter = ArrayAdapter.createFromResource();
createFromResource()参数:
<1>context : 上下文
<2>数据资源ID
<3>列表中用于显示数据的布局
通过直接创建ArrayAdapter的方式:
//获取资源对象
String[] citys = getResources().getStringArray(R.array.city);
ArrayAdapter adapter = new ArrayAdapter(
this,R.layout.spinner_item,citys);
自定义下拉列表布局:
//使用自定义的布局文件
ArrayAdapter adapter =ArrayAdapter.createFromResource(this,
R.array.city,R.layout.spinner_item);
spinner_item布局文件通常使用android默认的ID:@android:id/text1
//获取下拉列表当前选中的值
String city = spinner_city.getSelectedItem().toString();
十二、AutoCompleteTextView 自动完成
给用户提供建议选项
常用属性:
android:completionThreshold="1" 输入字符数,显示提示选项
android:completionHint="请选择一个城市" 提示信息
android:dropDownSelector="#def9de" 选中下拉列表的颜色
提供的建议列表,通过适配器提供
ArrayAdapter arrayAdapter = ArrayAdapter.createFromResource(
this,R.array.city,android.R.layout.simple_list_item_1);
autoCompleteTextView.setAdapter(arrayAdapter);
十三、ProgressBar进度条组件
两种样式:
1、表盘样式(圆的,一直在转)
2、水平样式(提供进度值的可视,通常用于加载确定时间的操作提示)
默认是表盘样式,如需水平样式,通过设置 style属性
style="?android:attr/progressBarStyleHorizontal"
当进度条是可确定值的我们可以设置以下属性:
android:max="100" 进度条的最大值
android:progress="50" 当前的进度值
android:secondaryProgress="80" 当前的第二进度值
如果是水平样式,也可以通过indeterminate属性设置为进度不确定
android:indeterminate="true" true表示进度条不确定,false表示确定
如果为true进度条的样式将为重复水平滚动
ProgressDialog 对话框进度条
以对话框的方式显示进度条样式:
可以是表盘样式或水平样式
ProgressDialog pd = new ProgressDialog(this);
默认是表盘样式
设置为水平样式:
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//设置为水平样式
pd.setMax(100);//设置最大进度值
pd.setMessage("正在努力加载中...");
pd.setTitle("加载数据");
pd.setCancelable(true);//不允许取消
//监听对话框关闭的事件
pd.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
dialog.cancel();
}
});
pd.show(); //显示
模拟下载操作
private void showDialog(){
final ProgressDialog pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setTitle("下载");
pd.setMessage("正在玩命下载中.....");
pd.setMax(100);
pd.setProgress(0);
pd.setCancelable(false);
pd.show();
//使用线程模拟一个下载操作
new Thread(new Runnable() {
@Override
public void run() {
while (true){
//判断进度值是否为最大值,如果是表示下载完成,取消对话框,结束线程
if(pd.getProgress()>=pd.getMax()){
pd.cancel();
break;
}
pd.incrementProgressBy(10);//增长进度
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
标题进度条(在标题栏的右上角使用表盘模式的进度条),一般不使用
自定义进度条:
1、在res/drawbale/layer_progress.xml
//fromDegrees 起始角度
//toDegrees 结束角度
//pivotX 旋转的中心点X坐标
//pivotY 旋转的中心点Y坐标
-
android:toDegrees="360" android:pivotX="50%" android:pivotY="50%"/>
2、在布局文件中的ProgressBar组件定义时使用:
android:indeterminateDrawable="@drawable/layer_progress"
十四、AlertDialog对话框
对话框用窗口的方式与用户实现交互
1、创建 一个提示对话框:
//对话框的建造者
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("温馨提示:");
builder.setMessage("你真的要退出吗");
builder.setIcon(android.R.drawable.ic_menu_info_details);
builder.setCancelable(false);//不能被取消(指的是不能通过点击对话框以外的地方关闭)
//设置按钮
builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "程序已退出", Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("否", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "再玩会儿吧", Toast.LENGTH_SHORT).show();
}
});
builder.setNeutralButton("隐藏", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "啥也不说了", Toast.LENGTH_SHORT).show();
}
});
// builder.create().show();
builder.show();
}
2、列表选择对话框
注意:设置message后将不显示选项列表
测试数据:String[] names = {"宏才","大雷","张伟","闫鹏"};
<1>列表多选
列表选项中带复选框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("多选列表");
//设置多项选择(选项数组,默认是否选中数组(null表示不选中),事件处理)
builder.setMultiChoiceItems(names, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(MainActivity.this, names[which], Toast.LENGTH_SHORT).show();
}
});
builder.show();
<2>列表单选
列表选项中带单选按钮
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("单选列表");
//设置单项选择(选项数组,默认是否选中(-1表示没有),事件处理)
builder.setSingleChoiceItems(names, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, names[which], Toast.LENGTH_SHORT).show();
}
});
builder.show();
<3>列表选项
只提供列表项选择一个
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("单选列表");
//设置选项(选项数组,事件处理)
builder.setItems(names, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, names[which], Toast.LENGTH_SHORT).show();
}
});
builder.show();
3、自定义对话框:
自定义对话框在未来开发中使用较多,意思是在对话框内的视图使用自定义布局的方式
1、自定义一个布局文件,在该文件中定义视图要显示的界面
2、在代码中加载布局文件:
ViewGroup:表示是否把布局填充到指定的父布局中,如果没有则使用null
<1>通过LayoutInflater.from(this).inflate(布局文件ID,ViewGroup);
<2>在Activity中可以使用
getLayoutInflater().inflate(布局文件ID,ViewGroup);
加载布局文件后返回一个View对象,该对象包含了布局文件中的所有组件
3、把返回的View对象通过builder.setView(view)方法设置到对话框中
4、如果需要获取View中的组件,可以通过:
view.findViewById(id)方法来获取
5、在6.0(API23)后builder提供了setView(布局文件的ID)方法来直接设置视图
十五、日期时间组件
1、时间对话框
<1>创建一个FragmentDialog的子类,用于创建一个可以兼容Fragment的对话框
如:TimePickerFragment extends FragmentDialog
<2>重写FragmentDialog的onCreateDialog()方法用于创建对话框
<3>onCreateDialog该方法返回一个TimePickerDialog对象:
TimePickerDialog dialog = new TimePickerDialog(getActivity(),this,hour,minute,true);
参数:
context: 上下文
OnTimeSetListener: 时间对话框确认按钮的回调事件:TimePickerDialog.OnTimeSetListener
hour : 小时
minute: 分钟
是否为24小时制:true
<4>实现OnTimeSetListener的onTimeSet方法
通过该方法来获取对话框中设置的时间值(可以显示在界面上或进行相应的处理)
<5>在Activity类中调用TimePickerFragment的show()方法,显示对话框
show()方法中的两个参数:Fragment管理器,字符串标记
2、日期对话框
<1>创建一个FragmentDialog的子类,用于创建一个可以兼容Fragment的对话框
如:DatePickerFragment extends FragmentDialog
<2>重写FragmentDialog的onCreateDialog()方法用于创建对话框
<3>onCreateDialog该方法返回一个DatePickerDialog对象:
DatePickerDialog dialog = new DatePickerDialog(getActivity(),this,year,month,day);
参数:
context: 上下文
OnDateSetListener: 时间对话框确认按钮的回调事件:DatePickerDialog.OnDateSetListener
year : 年
month: 月
day:日
<4>实现OnDateSetListener的onDateSet方法
通过该方法来获取对话框中设置的日期值(可以显示在界面上或进行相应的处理)
<5>在Activity类中调用DatePickerFragment的show()方法,显示对话框
show()方法中的两个参数:Fragment管理器,字符串标记
注意:
我们在Activity类中定义的UI组件,现在要通过另一个类(Fragment/*)来设值
实现方案是:
在Activity中定义一个公有方法来设置UI组件的值,该方法是提供给另一类来调用
十六、GridView组件
网络视图组件,在应用中通常可以用来作为功能列表界面
1、在布局文件中定义一个GridView组件:
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:gravity="center" />
columnWidth:列宽
numColumns:总列数,使用auto_fit表示自动适配
stretchMode:伸展模式,columnWidth 以列宽的方式伸展
verticalSpacing:垂直间隔
horizontalSpacing:水平间隔
gravity:内容显示方式,center居中
2、在代码中获取组件:
GridView gridView = (GridView)findViewById(R.id.gridview);
3、自定义一个适配器类(继承BaseAdapter)
//内部类
/**
* 自定义适配器
*/
private static class MyAdapter extends BaseAdapter{
private String[] data;
private Context context;
public MyAdapter(Context context,String[] data){
this.context = context;
this.data = data;
}
//返回选项的总数
@Override
public int getCount() {
return data.length;
}
//获取每个选项的数据
@Override
public Object getItem(int position) {
return data[position];
}
//返回每个选项的ID
@Override
public long getItemId(int position) {
return position;
}
/**
* UI组件通过调用该方法获取一个视图,并填充到内部的选项中
* @param position
* @param convertView
* @param parent
* @return
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView------position="+position);
TextView tv = new TextView(context);
tv.setGravity(Gravity.CENTER);
tv.setText(data[position]);
return tv;
}
}
4、提供需要填充到适配器的数据:
String[] data = {"转帐","查水费","查电费","手机充值","公交充值","查天气","公积金",
"美食","世界那么大","外卖","快递","理财","彩票","股票","火车票"};
5、实例化适配器对象,并与组件绑定
MyAdapter adapter = new MyAdapter(this,data);
gridView.setAdapter(adapter);
6、设置选项的单击事件
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
System.out.println("parent="+parent);
System.out.println("view="+view);
System.out.println("position="+position);
System.out.println("id="+id);
TextView tv = (TextView) view;
Toast.makeText(MainActivity.this, tv.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
(二)使用自定义布局来设置每一个网格选项的内容:
1、创建一个布局文件,此文件的目的是给网格中的每一个选项定义视图
2、在自定义适配器中的getView方法加载布局(实例化)
View view = LayoutInflater.from(context).inflate(R.layout.item_layout,null);
3、再从view中查找相应的组件
ImageView iv = (ImageView)view.findViewById(R.id.imageView);
再为每一个子组件设置相应值:
iv.setImageResource(...)
return view;
十七、ListView组件
ListView以垂直列表的方式展示数据,在实际开发经常使用
1、使用资源文件数据绑定
<1>在values/arrays.xml(strings.xml) 定义一组字符串数据
- 宏才
- 大雷
- 大张伟
- 大龙神
- 学霸朝旭
<2>在ListView的布局文件声明中使用
android:entries="@array/names" 绑定资源文件
<3>在Activity中获取ListView组件,并设置选项单击事件
ListView listView = (ListView) findViewById(R.id.listView);
//设置选项单击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView> parent, View view, int position, long id) {
//parent : ListView组件
//view:每一个列表选项视图
//position:列表选项的位置
//id:ID
TextView tv = (TextView) view;
Toast.makeText(MainActivity.this, tv.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
基本属性配置:
android:dividerHeight="30dp" 间隔高度
android:divider="@color/colorAccent" 间隔颜色
android:listSelector="#b9f9f9" 列表项被选中的颜色
android:fastScrollEnabled="true" 快速滚动时滚动条启用小方块
android:scrollbars="vertical" 滑动时显示滚动条
2、使用ListActivity实现列表(了解)
<1>Activity类继承ListActivity
在ListActivity中默认自带一个ListView组件,继承ListActivity后不需要自定义主布局文件
<2>可以通过ListActivity中定义的getListView()方法获取ListView
<3>使用ListActivity类中定义的setListAdapter()方法设置适配器(绑定数据)
<4>重写ListActivity类中定义的onListItemClick方法实现列表单击事件
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
TextView tv = (TextView) v;
Toast.makeText(Main2Activity.this, tv.getText().toString(), Toast.LENGTH_SHORT).show();
}
3、单选与多选ListView
<1>单选:
ArrayAdapter adapter = ArrayAdapter.createFromResource(
this,R.array.names,android.R.layout.simple_list_item_single_choice);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
<2>多选:
ArrayAdapter adapter = ArrayAdapter.createFromResource(
this,R.array.names,android.R.layout.simple_list_item_multiple_choice);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
4、使用SimpleAdapter填充复杂布局(ListView)
<1>封装要填充的数据格式:
//一个Map对象表示列表中的一个选项,再把多个Map对象组装成List集合
Map row1 = new HashMap<>();
row1.put("image",android.R.drawable.ic_delete);
row1.put("text","删除信息");
//
List