智能终端软件设计及开发实验三.docx
《智能终端软件设计及开发实验三.docx》由会员分享,可在线阅读,更多相关《智能终端软件设计及开发实验三.docx(24页珍藏版)》请在冰豆网上搜索。
智能终端软件设计及开发实验三
昆明理工大学信息工程与自动化学院学生实验报告
(2013—2014学年第1学期)
课程名称:
智能终端软件设计及开发开课实验室:
信自楼4442013年11月18日
年级、专业、班
计科101
学号
201010803116
姓名
李力
成绩
实验项目名称
Android用户界面设计与开发2(高级界面)
指导教师
游进国
教师评语
该同学是否了解实验原理:
A.了解□B.基本了解□C.不了解□
该同学的实验能力:
A.强□B.中等□C.差□
该同学的实验是否达到要求:
A.达到□B.基本达到□C.未达到□
实验报告是否规范:
A.规范□B.基本规范□C.不规范□
实验过程是否详细记录:
A.详细□B.一般□C.没有□
教师签名:
年月日
一、上机目的及内容
1.上机内容
1.1使用Fragment界面控件及Actionbar界面组件实现Android的高级用户界面设计与开发:
编程实现“天气预报服务”软件的用户界面。
可以通过图片和文字显示当前和未来几天的天气状况,包括温度、湿度、风向和雨雪情况等。
包括三个选项卡页面:
天气预报、历史数据和系统设置。
下面给出了用户界面的设计参考:
1.2实现一个选项菜单,当点击智能终端的“菜单键”时打开选项菜单,该选项菜单包含一个菜单项:
“退出”,实现该菜单项功能。
2.上机目的
(1)学习并熟悉Android的高级用户界面;
(2)能够使用Fragment界面控件、Actionbar界面组件及菜单进行高级用户界面设计与开发。
二、实验原理
2.1Fragment界面控件
2.1.1、Fragment界面控件特性
Fragment是activity的界面中的一部分或一种行为。
可以把多个Fragment组合到一个activity中来创建一个多面界面并且可以在多个activity中重用一个Fragment。
可以把Fragment认为模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。
Fragment不能独立存在,它必须嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影响。
例如:
当activity暂停时,它拥有的所有的Fragment都暂停了,当activity销毁时,它拥有的所有Fragment都被销毁。
然而,当activity运行时(在onResume()之后,onPause()之前),可以单独地操作每个Fragment,比如添加或删除它们。
当在执行上述针对Fragment的事务时,可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个Fragment的一次事务。
有了这个栈,就可以反向执行Fragment的事务,这样就可以在Fragment级支持“返回”键(向后导航)。
当向activity中添加一个Fragment时,它须置于ViewGroup控件中,并且需定义Fragment自己的界面。
可以在layoutxml文件中声明Fragment,元素为:
;也可以在代码中创建Fragment,然后把它加入到ViewGroup控件中。
然而,Fragment不一定非要放在activity的界面中,它可以隐藏在后台为actvitiy工作。
2.1.2、生命周期
onCreate():
当创建fragment时系统调用此方法。
在其中必须初始化fragment的基础组件们。
可参考activity的说明。
onCreateView():
系统在fragment要画自己的界面时调用(在真正显示之前)此方法。
这个方法必须返回frament的layout的根控件。
如果这个fragment不提供界面,那它应返回null。
onPause():
大多数程序应最少对fragment实现这三个方法。
当然还有其它几个回调方法可应该按情况实现之。
所有的生命周期回调函数在“操控fragment的生命周期”一节中有详细讨论。
下图为fragment的生命周期(它所在的activity处于运行状态)。
添加Fragments
onAttach()
onCreate()
onCreateView()
onActivityCreated()
onStart()
onResume()
Fragments是活动的(正在使用)
Fragment从
返回堆栈中返回到布局文件
用户使用返回功能或Fragments被移除(替换)
Fragments被
添加到返回堆栈中,接着被移除(替换)
onPause()
onStop
onDestroyView()
onDestroy()
onDetach()
Fragments被销毁
2.1.3、派生类
DialogFragment
显示一个浮动的对话框。
使用这个类创建对话框是替代activity创建对话框的最佳选择.因为可以把fragmentdialog放入到activity的返回栈中,使用户能再返回到这个对话框。
ListFragment
显示一个列表控件,就像ListActivity类,它提供了很多管理列表的方法,比如onListItemClick()方法响应click事件。
PreferenceFragment
显示一个由Preference对象组成的列表,与PreferenceActivity相同。
它用于为程序创建“设置”activity。
2.2、Actionbar界面组件
2.2.1、ActionBar内容:
从左到右分别是:
1、应用图标区:
位于ActionBar的最左侧,显示当前应用的图标。
这个图标也可以实现导航功能。
当用户单击应用图标时,Activity的方法onOptionsItemSelected()将被触发,并传递一个名为android.R.id.home的ID作为参数。
2、应用标题区:
显示当前应用的标题
3、导航区域:
ActionBar可以方便的实现应用内部导航,它具有三种不同的导航模式,当ActionBar处于不同的导航模式时,将显示不同的导航控件,如Tab或者下拉列表等。
4、动作按钮区:
选项菜单中的部分选项将以图标按钮的形式直接显示出来,方便用户更加便捷的操作。
5、菜单区:
显示一个图标按钮,单击时,将弹出一个扩展菜单显示选项菜单中的其他内容。
2.2.2、ActionBar主要功能
1、直接显示选项菜单。
这样就不需要用户通过单击按钮来显示选项菜单了。
如果选项菜单中项目太多,将在一个下拉列表中显示。
2、提供多种内部导航模式,包括标准模式、Tab模式和下拉列表等。
3、提供交互式活动视图代替选项条目,如SearchView等。
4、使用程序的图标作为返回Home主屏或向上的导航操作。
与选项菜单一样,ActionBar作为Activity的一部分,可以调用Activity的方法getActionBar()来获取它的引用。
2.2.3、显示选项菜单
通过在onCreateOptionsMenu(Menumenu)
{
newMenuInflater(this).inflate(R.menu.menu,menu);
}
其中在menu.xml定义菜单选项。
可以通过设置属性android:
showAsAction="ifRoom|withText"来指定菜单选项出现在ActionBar的导航栏中。
当然也可以在代码中为ActionBaar动态添加选项。
示例代码如下:
@Override
publicbooleanonCreateOptionsMenu(Menumenu)
{
newMenuInflater(this).inflate(R.menu.menu,menu);
//动态添加选项
MenuItemactionItem=menu.add("新增选项的名字");
actioItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_WITH_TEXT);
actionItem.setIcon("...");
return(super.onCreateOptionsMenu(menu));
}
三、实验方法、步骤(或:
程序代码或操作过程)
Java代码:
packagecom.example.weathear;
importandroid.app.TabActivity;
importandroid.os.Bundle;
importandroid.widget.TabHost;
importandroid.view.LayoutInflater;
publicclassMainActivityextendsTabActivity{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
TabHosttabHost=getTabHost();
LayoutInflater.from(this).inflate(R.layout.activity_main,tabHost.getTabContentView(),true);
LayoutInflater.from(this).inflate(R.layout.activity_main1,tabHost.getTabContentView(),true);
LayoutInflater.from(this).inflate(R.layout.activity_main2,tabHost.getTabContentView(),true);
tabHost.addTab(tabHost.newTabSpec("TAB1")
.setIndicator("天气预报").setContent(R.id.weather1));
tabHost.addTab(tabHost.newTabSpec("TAB2")
.setIndicator("历史数据").setContent(R.id.weather2));
tabHost.addTab(tabHost.newTabSpec("TAB3")
.setIndicator("系统设置").setContent(R.id.weather3));
}
}
Xml界面代码:
android="
xmlns:
tools="
android:
layout_width="match_parent"
android:
layout_height="match_parent"
android:
paddingBottom="@dimen/activity_vertical_margin"
android:
paddingLeft="@dimen/activity_horizontal_margin"
android:
paddingRight="@dimen/activity_horizontal_margin"
android:
paddingTop="@dimen/activity_vertical_margin"
android:
id="@+id/weather1"
>
android:
id="@+id/textView1"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
text="@string/hello_world"/>
android:
id="@+id/textView2"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView1"
android:
layout_alignBottom="@+id/textView1"
android:
layout_centerHorizontal="true"
android:
text="xx"/>
android:
id="@+id/textView3"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignLeft="@+id/textView1"
android:
layout_below="@+id/textView1"
android:
layout_marginTop="16dp"
android:
text="Humidity:
"/>
android:
id="@+id/textView4"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView3"
android:
layout_alignBottom="@+id/textView3"
android:
layout_alignLeft="@+id/textView2"
android:
text="xx%"/>
android:
id="@+id/textView6"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView5"
android:
layout_alignBottom="@+id/textView5"
android:
layout_alignLeft="@+id/textView4"
android:
text="xx"/>
android:
id="@+id/textView7"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignLeft="@+id/textView5"
android:
layout_below="@+id/textView5"
android:
layout_marginTop="22dp"
android:
text="Time:
"/>
android:
id="@+id/textView8"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView7"
android:
layout_alignBottom="@+id/textView7"
android:
layout_alignLeft="@+id/textView6"
android:
text="2009-09-2006:
04:
00"/>
android:
id="@+id/textView5"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignLeft="@+id/textView3"
android:
layout_below="@+id/textView3"
android:
layout_marginTop="23dp"
android:
text="Wind:
"/>
android:
id="@+id/textView9"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignLeft="@+id/imageView1"
android:
layout_below="@+id/imageView1"
android:
text="CityName"/>
android:
id="@+id/imageView2"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignLeft="@+id/textView14"
android:
layout_below="@+id/textView10"
android:
layout_marginTop="22dp"
android:
src="@drawable/ic_launcher"/>
android:
id="@+id/textView10"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView11"
android:
layout_alignBottom="@+id/textView11"
android:
layout_alignRight="@+id/textView7"
android:
text="Won"/>
android:
id="@+id/imageView1"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignRight="@+id/textView6"
android:
layout_below="@+id/textView8"
android:
layout_marginTop="30dp"
android:
src="@drawable/ic_launcher"/>
android:
id="@+id/textView11"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView12"
android:
layout_alignBottom="@+id/textView12"
android:
layout_alignLeft="@+id/imageView3"
android:
text="Tue"/>
android:
id="@+id/textView12"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView13"
android:
layout_alignBottom="@+id/textView13"
android:
layout_toRightOf="@+id/textView4"
android:
text="Wen"/>
android:
id="@+id/imageView3"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignTop="@+id/imageView2"
android:
layout_toRightOf="@+id/textView1"
android:
src="@drawable/ic_launcher"/>
android:
id="@+id/textView15"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView14"
android:
layout_alignBottom="@+id/textView14"
android:
layout_alignLeft="@+id/imageView3"
android:
text="高/低"/>
android:
id="@+id/imageView4"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignTop="@+id/imageView3"
android:
layout_toRightOf="@+id/textView4"
android:
src="@drawable/ic_launcher"/>
android:
id="@+id/textView16"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignBaseline="@+id/textView15"
android:
layout_alignBottom="@+id/textView15"
android:
layout_toRightOf="@+id/textView9"
android:
text="高/低"/>
android:
id="@+id/textView