android1223章.docx
《android1223章.docx》由会员分享,可在线阅读,更多相关《android1223章.docx(48页珍藏版)》请在冰豆网上搜索。
android1223章
第12章高级UI组件
1.什么是Android视图组件的数据绑定方式?
答:
Android视图组件的数据绑定方式是指将数据集里的数据项与视图界面组件之间建立对应关系,当一个视图组件与某个数据项绑定后,数据项内容改变时就会自动改变视图中内容。
数据项通常是数组元素、数据库字段、ContentProvider中表格中的列等。
2.什么是Adapter?
什么是AdapterView?
两者有何关系?
答:
(1)Adapter提供了对数据项的访问,并且负责为每个数据项生成一个视图(View)对象。
Adapter是一个接口(Interface)并不能直接创建对象,程序员必须建立实现(Implements)Adapter接口的类,才能利用这个自定义类的对象来绑定数据到视图组件,但Android已经提供了一系列实现了Adapter接口的类,如:
BaseAdapter、ArrayAdapter、SimpleCursorAdapter等。
(2)AdapterView类是一个能绑定数据的视图(View)类型,是ViewGroup的子类,能被Adapter绑定的UI控件必须继承AdapterView类。
(3)Adapter(适配器)能在AdapterView对象和底层数据之间起到桥梁作用,即将数据绑定到UI界面。
3.请根据程序中注释要求在空白划线处填写代码。
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.spinner);
m_txtView=(TextView)this.findViewById(R.id.TextView01);
m_Spinner=(Spinner)this.findViewById(R.id.Spinner01);
//新建元素类型为String的ArrayAdapter对象adapter,参数中指定该对象与
//数组m_bloods数据绑定,界面布局指定为android.R.layout.simple_spinner_item______________________________________________________________________;
/设置列表中视图组件排列为下拉式风格:
//android.R.layout.simple_spinner_dropdown_item
______________________________________________________________________;
//为m_Spinner中设置adapter对象
______________________________________________________________________;
//为Spinner对象添加选中项事件监听器对象m_SpinnerListener
______________________________________________________________________;
//将Spinner对象设置为可见
______________________________________________________________________;
}
答:
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.spinner);
m_txtView=(TextView)this.findViewById(R.id.TextView01);
m_Spinner=(Spinner)this.findViewById(R.id.Spinner01);
//新建元素类型为String的ArrayAdapter对象adapter,参数中指定该对象与
//数组m_bloods数据绑定,界面布局指定为android.R.layout.simple_spinner_item
adapter=newArrayAdapter(this,
android.R.layout.simple_spinner_item,m_bloods);
//调用adapter对象方法设置为
//下拉式视图资源android.R.layout.simple_spinner_dropdown_item
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//为m_Spinner中设置adapter对象
m_Spinner.setAdapter(adapter);
//为Spinner对象设置列表项选中事件监听器对象m_SpinnerListener
m_Spinner.setOnItemSelectedListener(m_SpinnerListener);
//将Spinner对象设置为可见
m_Spinner.setVisibility(View.VISIBLE);
}
4.请阅读下面程序片断后回答下列问题。
privateSpinner.OnItemSelectedListenerm_SpinnerListener
=newSpinner.OnItemSelectedListener()
{
publicvoidonItemSelected(AdapterView
>arg0,Viewarg1,intarg2,
longarg3){
m_txtView.setText("你的血型是:
"+m_bloods[arg2]);
}
publicvoidonNothingSelected(AdapterView
>arg0){
}
};
(1)程序片断主要功能是什么?
(2)publicvoidonItemSelected(AdapterView
>arg0,Viewarg1,intarg2,longarg3)方法中参数含义是什么?
答:
(1)为Spinner类对象创建列表项选中事件监听接口对象,并实现其列表项选监听方法和选择消失监听方法。
(2)
选项选中的监听方法onItemSelected(AdapterView,View,int,long)参数说明
第1个参数:
选项所在的AdapterView
第2个参数:
AdapterView中被点击的View组件
第3个参数:
Adapter中View的位置序号
第4个参数:
被选中项的行id
5.请认真阅读下面程序后回答问题。
publicclassCompactListDemoextendsListActivity{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
SimpleAdapteradapter=newSimpleAdapter(this,getData(),
R.layout.listitem,
newString[]{"title","info","img"},
newint[]{R.id.title,R.id.info,R.id.img});
setListAdapter(adapter);
}
privateList
List
Mapmap=newHashMap();
map.put("title","Android");
map.put("info","googleproduct");
map.put("img",R.drawable.android);
list.add(map);
returnlist;
}
}
(1)详细说明语句功能及参数含义:
SimpleAdapteradapter=newSimpleAdapter(this,getData(),
R.layout.listitem,
newString[]{"title","info","img"},
newint[]{R.id.title,R.id.info,R.id.img});
(2)逐行注释privateList>getData()方法中各语句,并说明该方法功能。
(3)如果要处理ListView中选项被选中事件,你认为应该为该对象添加什么接口对象并实现什么方法?
答:
(1)
功能:
新建SimpleAdapter类型的数据绑定适配器。
SimpleAdapter适用于将静态数据映射到定义在XML中的视图组件。
通常,指定元素类型为Map型的ArrayList作为数据源,ArrayList中每项对应列表视图中一行,也就是每个Map型元素对应一行,再指定一个包含视图组件的XML文件作为列表中行的界面布局用于显示数据,通过Map中的key将数据映射到指定的View组件。
SimpleAdapter数据绑定适配器构造方法参数说明:
SimpleAdapter(Contextcontext,
List
extendsMap>>data,
intresource,
String[]from,
int[]to)
第1个参数:
与SimpleAdapter关联的视图组件所在的应用环境对象
第2个参数:
在列表视图组件中显示的List数据集,List中每个元素对应列表视图中一行,List元素类型为Map,每个Map元素可以由若干个键值对构成
第3个参数:
列表视图中项的视图界面布局资源标识
第4个参数:
由一个Map中全部key名称构成的字符串数组,每个Map元素对应一个列表视图项,Map中每个键值对都与列表项中一个显示数据的视图组件关联
第5个参数:
由列表视图的项中显示数据的视图组件id构成的数组,这个数组中的视图id与第4个参数数组中key名称依次对应
(2)
//为列表视图获取数据集List的方法
privateList>getData(){
//新建一个元素类型为Map的ArrayList对象,并保存到List类型的名为list的对象中,//Map中元素的key的类型为String,value的类型为任意对象
List>list=newArrayList>();
//新建一个HashMap对象,并保存到Map类型的名为map的对象中,
//HashMap中元素的key的类型为String,value的类型为任意对象
Mapmap=newHashMap();
//map对象中添加一个key为“title”,value为“Android”的元素
map.put("title","Android");
//map对象中添加一个key为“info”,value为“googleproduct”的元素
map.put("info","googleproduct");
//map对象中添加一个key为“img”,value为R.drawable.android的元素
map.put("img",R.drawable.android);
//将map对象添加到list对象中
list.add(map);
//将list对象作为返回值
returnlist;
}
功能:
为列表视图获取数据集List的方法
(3)OnItemClickListener接口的onItemClick()方法。
第13章Menu
1.Menu组件的主要功能是什么
答:
Menu(菜单)在许多应用类型中是很常见的用户界面组件,在Activity中使用MenuAPIs可以向用户提供熟悉且统一的操作(action)选项。
2.Android提供了哪三种常用菜单?
答:
Android菜单分三种:
选项菜单(Optionsmenuandactionbar)
上下文菜单(Contextmenuandcontextualactionmode)
弹出式菜单(Popupmenu),按其用途又称子菜单
2.选项菜单(optionsmenu)的主要功能有哪些?
如何打开选项菜单的扩展菜单?
答:
对于activity来说,选项菜单(optionsmenu)是主要的菜单项集合,用于那些对应用有全局影响的操作功能,比如:
搜索(Search)、撰写邮件(Composeemail)以及设置(Settings)等操作。
在Android2.3及更低版本中,可以按“Menu”物理按键打开选项菜单;在Android3.0及更高版本中,选项菜单中的选项功能可以由actionbar提供,从Android3.0开始,“Menu”按钮已经不推荐使用,某些设备已经没有这个物理按键。
4.什么是上下文菜单(Contextmenuandcontextualactionmode)?
如何打开上下文菜单?
请提供上下文菜单截图。
答:
上下文菜单(Contextmenuandcontextualactionmode)是一种浮动型菜单,当用户长按某个视图项目时就会出现,提供影响选中项目或相关内容的操作。
5.什么是弹出式菜单(Popupmenu)?
如何打开弹出式菜单?
请提供弹出式菜单截图。
答:
弹出式菜单是显示在一个垂直列表中的菜单项,这个列表会停靠于激活这个菜单的视图组件。
弹出式菜单适用于提供与特定内容相关的一连串操作,也可以向某个操作命令提供作为子菜单的操作选项。
7.在建立Menu菜单项ID时常出现类似如下语句,请问其中Menu.FIRST的含义是什么?
publicstaticfinalintBlue_ID=Menu.FIRST+1;
publicstaticfinalintCYAN_ID=Menu.FIRST+2;
publicstaticfinalintRED_ID=Menu.FIRST+3;
答:
Menu类定义的菜单首项的ID值整型常量,值为1
9.下面程序中menu为Menu对象,请逐个说明Menu对象链式调用方法中各个方法功能、参数含义和返回值类型。
Intenti=newIntent(Main.this,OtherActivity.class);
menu.add(Menu.NONE,RED_ID,Menu.NONE,"红色").
setIcon(R.drawable.palette).
setAlphabeticShortcut('R').
setIntent(i);
答:
//创建显示意图对象
Intenti=newIntent(Main.this,OtherActivity.class);
menu.add(Menu.NONE,RED_ID,Menu.NONE,"红色")//添加菜单项
.setIcon(R.drawable.palette)//为菜单项设置图标
.setAlphabeticShortcut('R')//为菜单项设置快捷键
.setIntent(i);//为菜单项动作设置意图对象
注:
参数含义及返回值类型请自行查询SDK文档,略。
18.下面是某Activity中使用菜单资源创建并处理菜单项的程序片断,请根据注释提示在空白划线处填写代码。
publicbooleanonCreateOptionsMenu(Menumenu){
//获取Menuflater对象后链式调用展开菜单资源的方法,展开sample菜单资源.
________________________________________;
returntrue;
}
@Override
publicbooleanonOptionsItemSelected(MenuItemitem){
//用if语句判断当前菜单项id是否是swap
if(____________________________){
Intenti=newIntent(this,Another.class);
startActivity(i);
returntrue;
}
//取得菜单项Title后强制转换成String类型,并赋值给新定义的message对象
__________________________________________;
if(message!
=null){
Toast.makeText(this,"你选择穿越回到"+message,Toast.LENGTH_SHORT)
.show();
return(true);
}
//调用父类中同名方法并将其值作为当前方法返回值
_______________________________________________;
}
答:
getMenuInflater().inflate(R.menu.sample,menu);
item.getItemId()==R.id.swap
Stringmessage=(String)(item.getTitle());
return(super.onOptionsItemSelected(item));
第14章ActionBar
1.什么是ActionBar?
它通常包含哪些区域?
答:
ActionBar是一种向用户提供应用操作和导航的窗口样式。
常见形式如图所示。
在ActionBar中,从左到右分别是:
(1)应用图标区(Appicon):
代表当前应用的图形徽标。
(2)视图控制区(Viewcontrol):
控制下拉菜单或选项卡视图切换
(3)操作按钮区(Actionbuttons):
常用操作按钮
(4)操作溢出区(Actionoverflow):
也称为扩展菜单按钮,点击这个按钮可以显示更多的操作选项。
2.请根据下面要求,在菜单资源文档空白划线处添加相应属性,并回答问题。
(1)将id为menu_save的菜单项设置为在ActionBar中有空间时显示并带有文本标签。
(2)将id为menu_search的菜单项设置为在ActionBar中有空间时显示(不需要文本标签)。
(3)id为menu_delete的菜单项是否会出现在ActionBar中?
(4)请说明android:
actionLayout="@layout/searchview"属性作用。
(5)请说明android:
icon="@drawable/save"属性作用。
android=">
android:
id="@+id/menu_save"
android:
icon="@drawable/save"
______________________________________
android:
title="保存"/>
android:
id="@+id/menu_delete"
android:
icon="@drawable/delete"
android:
title="删除"/>
android:
id="@+id/menu_search"
android:
actionLayout="@layout/searchview"
android:
icon="@drawable/search"
______________________________________
android:
title="Search"/>
答:
(1)
android:
showAsAction="ifRoom|withText"
(2)
android:
showAsAction="ifRoom"
(3)不会,因为没有设置android:
showAsAction属性,只作为OptionsMenu。
(4)为ActionBar中选项(item)中设置布局,引用布局资源文件searchview.xml。
(5)为ActionBar中选项(item)中设置图标,引用绘图资源save。
4.根据注释提示在空白划线处填写程序代码。
publicbooleanonCreateOptionsMenu(Menumenu){
//将菜单资源menu填充(inflate)到menu菜单对象中
___________________________________________________;
//为menu菜单对象添加标题为“分享(动态添加)”的菜单项,
//保存到MenuItem类的对象actionItem中
___________________________________________________;
//actionItem菜单项设置为ActionBar,属性为有空间时显示,且带有文本标签
___________________________________________________;
//为菜单项设置系统提供的图标ic_menu_share.ic_menu_share
___________________________________________________;
return(super.onCreateOptionsMenu(menu));
}
答:
//将菜单资源menu填充(inflate)到menu菜单对象中
newMenuInflater