版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学与技术系计算机科学与技术系颜德彪颜德彪AndroidAndroid应用开发应用开发Unit Outline单元名称:Android UI开发课时:12单元项目:Chapter03UIChapter03UI主要内容:UI布局常用控件的使用菜单与导航Adapter与Adapter控件Lecture 1ViewView与布局与布局内容提要View与ViewGroupAndroid基本布局View与ViewGroupv 一个Android应用的界面是由View和ViewGroup对象构建的。所有UI组件都继承自View类v 大部分UI组件都放在android.widget、android.v
2、iew及其子包中v ViewGroup是View的子类,即可作为View使用,也可向其中添加View基本布局LinearLayoutv 线性布局v android:orientation=vertical 垂直布局 每行仅包含一个界面元素v android:orientation=horizontal 水平布局 每列仅包含一个界面元素基本布局LinearLayoutv android:layout_gravity 指定子元素在LinearLayout中的对齐方式v android:layout_weight 指定子元素在LinearLayout中所占的权重v android:gravity 设
3、定Layout中元素的对其方式v android:layout_heightandroid:layout_width fill_parent 宽度或高度与父容器相同 match_parent 与fill_parent完全相同,从Android2.2以后推荐使用此属性 wrap_content 组件的大小刚好包裹它的内容即可基本布局RelativeLayoutv 相对布局v 利用控件之间的相对位置关系来进行布局v 控件与父容器、控件与其他控件之间的相对关系基本布局RelativeLayout基本布局RelativeLayout如何实现如下UI界面?基本布局FrameLayoutv 框架布局 框架
4、布局(FrameLayout)是最简单的界面布局,是用来存放一个元素的空白空间,且子元素的位置是不能够指定的,只能够放置在空白空间的左上角 如果有多个子元素,后放置的子元素将遮挡先放置的子元素 使用Android SDK中提供的层级观察器(Hierarchy Viewer)进一步分析界面布局 层级观察器能够对用户界面进行分析和调试,并以图形化的方式展示树形结构的界面布局基本布局FrameLayoutv 框架布局 android:gravity属性是对该view 内容的限定. 以button为例,android:gravity=“right”则button上面的文字靠右。 android:lay
5、out_gravity 是用来设置该view相对与父view 的位置。比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置。基本布局AbsoluteLayoutv 绝对布局 绝对布局(AbsoluteLayout)能通过指定界面元素的坐标位置,来确定用户界面的整体布局 绝对布局是一种不推荐使用的界面布局,因为通过X轴和Y轴确定界面元素位置后,Android系统不能够根据不同屏幕对界面元素的位置进行调整,降低了界面布局对不同类型和尺寸屏幕的适应能力。Layout_x 控制组件X坐标,Layout_y 控制组件y坐标。基本布局TableL
6、ayoutv 表格布局,配合TableRow使用,表示表格的一行,TableRow内有N个控件,表示有N列,TableRow继承自LinearLayout,故每一行都是水平放置。基本布局TableLayoutv 全局属性 android:stretchColumns 设置可伸展的列(设置某列可拉伸)。该列可以向行方向伸展,最多可占据一整行。 android:shrinkColumns 设置可收缩的列。当该列子控件的内容太多,已经挤满所在行,该子控件的内容将往列方向显示。 android:collapseColumns 设置要隐藏的列。v 单元格属性 android:layout_column
7、指定该单元格在第几列显示 android:layout_span 指定该单元格占据的列数(未指定时,为1)基本布局GridLayoutv 类似于表格布局,是Android 4.0及以上版本新增加的布局v 使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列v 分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列v 指定android:columnCount设置列数的属性后,控件会自动换行进行排列基本布局GridLayoutv 指定某控件显示在固定的行或列,只需设置该子控件的android:layout_row和android:layout_colu
8、mn属性即可,计数从0开始v 设置某控件跨越多行或多列,只需将该子控件的android:layout_rowSpan或者layout_columnSpan属性设置为数值,再设置其layout_gravity属性为fill即可,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。基本布局GridLayoutandroid:layout_gravity=“fill“android:layout_rowSpan=“3”跨越3行跨越3列练习UI布局练习Lecture 2AndroidAndroid常用控件常用控件内容提要TextView、EditTextImageView
9、、ImageButtonButton、RadioButton、CheckBoxProgressBarSeekBar、RatingBarTextViewv TextView是一种用于显示字符串的控件v 重要属性: android:layout_width=“fill_parent“ android:layout_height=wrap_content“ android:lines=“2“ 高度2行 android:text=string/hello“ android:textSize=50sp /v textView超链接: android:autoLink属性值 all: 所有连接有效,如we
10、b、phone、email等EditTextv EditText是一个具有编辑功能的TextView,是用来输入和编辑字符串的控件。v 重要属性: android:hint=请输入内容“ android:inputType=phone android:drawableLeft=drawable/iconv 子控件AutoCompleteTextView: 自动完成文本框,它继承自EditText,可以根据用户输入的文本弹出一个智能提示的下拉列表,这样用户便可以选择相应的选项。ImageView及其子类v ImageView:用于在页面中显示图片(图片的浏览)。v 常用属性 v imageVie
11、w详解 http:/ ImageButton:图片按钮,继承自ImageView。v 常用属性 v ImageButton单击切换按钮图片效果的实现 http:/ drawableLeft属性,会把图片放在按钮的最左侧,使用paddingLeft即可调整到想要的位置。 v 当然,如果需要右图左文字,上图下文字,下图上文字,也可以的,分别使用drawableRight, drawableTop, drawableBottom属性即可RadioButtonv 单选按钮v 配合RadioGroup使用,表示一组单选按钮v 为RadioGroup设置OnCheckedChangeListener事件监
12、听,监听单选按钮的变化CheckBoxv 多选按钮v 设置OnCheckedChangeListener事件监听ToggleButtontoggleButton.setChecked(false);toggleButton.setOnClickListener(new OnClickListener() ;v 状态开关按钮,常用于表示开-关场景中v 为ToggleButton设置setOnClickListener事件监听ProgressBarv 进度条v 默认为圆形进度条(大、中、小)v 通过设置style属性更改为水平进度条 style=android:style/Widget.Progr
13、essBar.Horizontal“ style=“?android:attr/progressBarStyleHorizontal“(等价)v 改变进度条的外观 android:progressDrawable=drawable/my_bar android:indeterminateDrawable=drawable/progress_imageSeekBarv 拖动条v 设置OnSeekBarChangeListener,监听拖动事件 RatingBarv 星级评分条v 设置OnRatingBarChangeListener,监听评分变化常用控件用法总结vTextView EditTex
14、tTextView主要用来显示字符串信息,可用setText()方法更改内容EditText用来让用户输入内容的控件v ImageView ImageButton ImageView 主要展示图片 注意scaleType属性取值 ImageButton 图片按钮v RadioButton CheckBox 注意两者的Listener所属的上层类名 RadioGroup.OnCheckedChangeListener CompoundButton.OnCheckedChangeListener常用控件用法总结vButton ToggleButton二者监听的Listener相同,都是View.O
15、nClickListenerToggleButton需要判断是否选中 isChecked()vProgressBar SeekBarProgressbar 主要用于显示后台工作进度,后台改变progress值Seekbar 供用户拖动滑块改变progress,添加事件监听即可获取当前进度vRatingBar评分使用三个属性 numStars rating stepSize(一般是1或者0.5)事件监听获取当前分值练习常用控件使用Lecture 3对话框对话框内容提要AlertDialogProgressDialogDatePickerDialogTimePickerDialog自定义对话框对话
16、框v AlertDialog:功能最为丰富,实际应用最为广泛的对话框。v ProgressDialog:进度对话框,是对简单进度条的封装。v DataPickerDialog:日期选择对话框。v TimePickerDialog:时间选择对话框。v 自定义对话框:对话框布局自定义,并设置监听事件v 参考网页v http:/ AlertDialog生成的对话框分为4个区域:图标区、标题区、内容区和按钮区。图标区标题区内容区按钮区AlertDialogv 创建对话框的步骤: 使用AlertDialog.Builder创建对象 调用AlertDialog.Builder的setTitle()或set
17、CustomTitle()方法设置标题。 调用AlertDialog.Builder的setIcon()方法设置图标 调用AlertDialog.Builder的相关设置方法设置对话框内容 调用AlertDialog.Builder的setPositiveButton、setNegativeButton()或setNeutralButton()方法添加多个按钮 调用AlertDialog.Builder的create()方法创建AlertDialog对象,再调用AlertDialog对象的show()方法将该对话框显示出来。AlertDialogDialog dialog = new Aler
18、tDialog.Builder(this).setIcon(android.R.drawable.btn_star).setTitle(喜好调查).setMessage(你喜欢李连杰的电影吗?).setPositiveButton(很喜欢, new DialogInterface.OnClickListener() .).setNegativeButton(不喜欢, new DialogInterface.OnClickListener() .).setNeutralButton(一般, new DialogInterface.OnClickListener() .).create();dia
19、log.show();AlertDialog的内容v 设置单选列表 setSingleChoiceItems(CharSquerence a, int b, new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) .);v 设置多选列表 setMultiChoiceItems(CharSquerence a, boolean b,OnClickListener listener)v 设置普通列表 setItems(CharSquerence a,OnClickLis
20、tener listener)v 设置自定义视图 setView(View v)单选对话框AlertDialog.Builder(this).setTitle(单选框).setIcon(android.R.drawable.ic_dialog_info).setSingleChoiceItems(new String “男”, “女” , “其他, 0,new DialogInterface.OnClickListener() .).setNegativeButton(取消, null).create().show();多选对话框String items = new String Java W
21、eb, Android应用开大发,分布式数据库,测试基础 ;boolean defaultChoices = false , true ,false ,true;AlertDialog.Builder builder = new AlertDialog.Builder(this).setTitle(多选列表项对话框).setIcon(R.drawable.tools).setMultiChoiceItems(items, defaultChoices, new OnMultiChoiceClickListener() .);builder.setPositiveButton(确定, new D
22、ialogInterface.OnClickListener() .);builder.setNegativeButton(取消, null);builder.create().show();列表对话框new AlertDialog.Builder(BasicDialog.this).setTitle(列表对话框).setItems(R.array.city_array, new DialogInterface.OnClickListener() ).create().show();自定义视图对话框1.自定义布局文件login.xml2. 获取布局实例xxxLayout3. 设置setView
23、(xxxLayout)思考:怎样获取并显示对话框中的内容?拖动条对话框View view = getLayoutInflater().inflate(R.layout.seek_dialog, null);final SeekBar sbar = (SeekBar) view.findViewById(R.id.seekBar1);AlertDialog.Builder seekbuilder = new AlertDialog.Builder(BasicDialog.this) seekbuilder.setTitle(拖动对话框);seekbuilder.setView(view);see
24、kbuilder.create();seekbuilder.show();进度条对话框v ProgressDialogv 将进度条简单包裹起来,可以设置进度条的各种式样v 启动线程,模拟耗时任务的进行,下载完成后,自动消失进度条对话框 /this表示该对话框是针对当前Activity的 ProgressDialog progressDialog = new ProgressDialog(DialogActivity.this); /设置最大值为100 progressDialog.setMax(100); / 设置可以被取消 progressDialog.setCancelable(true)
25、; /设置进度条风格STYLE_HORIZONTAL progressDialog.setProgressStyle( ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle(“文件下载中); progressDialog.setMessage(“文件已下载); progressDialog.show();日期/时间选择对话框Calendar c = Calendar.getInstance();DatePickerDialog dateDialog = new DatePickerDialog(this, new DatePicke
26、rDialog.OnDateSetListener() public void onDateSet(DatePicker dp, int year, int month, int dayOfMonth)., c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH);dateDialog.setIcon(android.R.drawable.ic_lock_idle_alarm);dateDialog.setTitle(选择日期)dateDialog.show();日期/时间选择对话框TimePickerD
27、ialog tpDialog = new TimePickerDialog(BasicDialog.this, listener2,calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true);tpDialog.setIcon(R.drawable.ic_launcher);tpDialog.setMessage(请设置时间);tpDialog.show();自定义对话框v 继承Dialog类v 实现构造方法和onCreate在styles.xml中自定义style自定义布局v 事件监听View.OnClick
28、Listenerv 传值自定义并实现接口(传出)类成员变量(传入)对话框public class MyDialog extends AlertDialogprotected MyDialog(Context context)protected void onCreate()final MyDialog userDialog = new MyDialog(BasicDialog.this);userDialog.setIcon(R.drawable.ic_launcher);userDialog.setTitle(自定义对话框);userDialog.show();/通过MyDialog对象找到
29、相关控件Button btn_ok = (Button) userDialog.findViewById(R.id.btn_ok_dialog);对话框总结v AlertDialog 普通提示对话框 setMessage 单选对话框 setSingleChoiceItems 多选对话框 setMultiChoiceItems 自定义View对话框 setViewv 自定义Dialog类 布局 dialog.xml 式样 styles.xml 继承Dialog,构造方法、onCreate 值的传入和传出适度掌握适度掌握 v进度条对话框 ProgessDialogv 拖动条对话框 SeekBarD
30、ialogv 日期选择对话框 DatePickerDialogv 时间选择对话框 TimePickerDialog练习常用对话框的使用Lecture 4菜单详解菜单详解内容提要选项菜单上下文菜单下拉菜单PopupMenu菜单Menuv OptionsMenu(选项菜单),默认看不到,当用户点击”Menu”键时,系统才显示应用关联的菜单。 SubMenu 子菜单v ContextMenu(上下文菜单),当用户一直按住某一个组件时,该组件关联的上下文菜单就显示出来。v PopupMenu(弹出式菜单),它会在指定组件上弹出PopupMenu,可以增加多个菜单项,并可以为菜单项增加子菜单。选项菜单与
31、子菜单选项菜单与子菜单v Menu菜单接口,SubMenu子菜单,MenuItem菜单项v add()方法用于添加菜单项;v addSubMenu()用于添加子菜单。v 添加菜单或子菜单的步骤如下: 1、重写Activity的onCreateOptionsMenu(Menu menu)方法,在该方法里面调用Menu对象的方法来添加菜单项或子菜单。 2、如果希望应用程序能响应菜单项的单击事件,重写Activity的onOptionsItemSelected(MenuItem mi)方法。选项菜单与子菜单选项菜单与子菜单v 超过6个MenuItem时,第6个显示为more,之后的以子菜单式样显示,
32、不再显示图标v 通过addSubMenu()用于添加子菜单v Menu可以包含多个SubMenu,SubMenu可以包含多个MenuItemv SubMenu不能包含SubMenu,即子菜单不能嵌套v 子菜单可以添加菜单头标题、图标,但菜单项不能显示图标v 动态改变选项菜单的内容,需重写onPrepareOptionsMenu(Menu)上下文菜单上下文菜单v 类似于普通桌面程序的右键菜单v 点击界面元素超过2s后自动出现的菜单v 可以被注册到任何View对象中(基本控件、布局文件、ListView的某一项等)v 开发上下文菜单步骤:v 1、重写Activity的onCreateContext
33、Menu()方法;v 2、调用Activity的registerForContextMenu(View view)方法为View组件组成上下文菜单。v 3、重写onContextItemSelected(MenuItem m)方法为菜单项提供响应。上下文菜单上下文菜单ContextMenuv 没有快捷键,不能显示菜单项图标v 每个Activity有且只有一个Options Menu,它为整个Activity服务。v 上下文菜单的拥有者是Activity中的View,显示地通过registerForContextMenu(View view)来为View指定是否拥有上下文菜单,多个View都可拥
34、有ContextMenuv onCreateOptionsMenu只在用户第一次按“Menu”键时被调用,而onCreateContextMenu会在用户每一次长按View时被调用v 视图元素需要向上下文菜单传递一些信息,比如该View对应DB记录的ID等,需要使用ContextMenuInfo,并重写getContextMenuInfo()方法使用XML文件定义菜单v 在res/menu目录下创建xxx.xml菜单布局文件v 定义菜单资源后,重写onCreateOptionsMenu()、onCreateContextMenu()方法v 在其中调用MenuInflater对象inflate方
35、法装载指定资源的对应菜单xxx.xmlv 好处: 简化Java代码,降低耦合 为每个菜单项、菜单组分配ID,可扩展性强使用XML文件定义菜单v 菜单资源文件放置在/res/menu目录下,根目录是元素,可不指定任何属性,可包括如下子元素v :定义菜单项 id、title、icon checkable、checked、visible、enablev :将多个包装成一个菜单组 checkableBehavior:none(不可选)、all(多选)、single(单选) visible:指定该组是否可见 enable:指定该组是否可用v 元素用于定义一份菜单项,元素又可包含元素,位于元素内部的就代表
36、子菜单。Android4.0中setIcon无效的问题v 原因:菜单的源码类 MenuBuilder做了改变public class MenuBuilder implements Menu ./mOptionalIconsVisible 为true时,才能显示图标private boolean mOptionalIconsVisible = false;. void setOptionalIconsVisible(boolean visible) mOptionalIconsVisible = visible; boolean getOptionalIconsVisible() return
37、mOptionalIconsVisible; .Android4.0中setIcon无效的问题v 解决方法: 反射机制,在代码运行创建菜单的时候通过反射调用setOptionalIconsVisible方法设置mOptionalIconsVisible为true,然后在给菜单添加Icon即可生效 Class clazz = Class.forName(ernal.view.menu.MenuBuilder); Method m = clazz.getDeclaredMethod(setOptionalIconsVisible, boolean.class); m.
38、setAccessible(true); m.invoke(menu, true); 弹出式菜单PopupMenuv PopupMenu代表弹出菜单,它会在指定组件上弹出PopupMenu。需要在API 11以上的版本中才能使用。v PopupMenu可以增加多个菜单项,并可以为菜单项增加子菜单。v 创建PopupMenu步骤 1、调用new PopupMenu(Context context,View anchor)创建下拉菜单,anchor代表要激发该弹出菜单的组件。 2、调用MenuInflater的inflate()方法将菜单资源填充到PopupMenu中。 3、调用PopupMenu
39、的show()方法显示弹出式菜单v 注意:PopupMenu的事件监听OnMenuItemClickListener弹出式菜单PopupMenuv 将Chapter03UI中的OptionsMenu提取到xml文件中,并实现相同效果 一般菜单项Item 菜单组group 子菜单v 注意:menu.xml与代码的配合使用ActionBar实现的菜单网页资料:Android动作栏ActionBar全解析Android3.0以后菜单的主要实风格ActionBar的用法v 创建Menu.xml,主要设置showAsAction属性(always:一直显示;ifRoom:有空间就显示;never:显示在
40、overFlow中)v 在onCreateOptionsMenu中解析菜单OverFlow的使用v 设置android:showAsAction为neverv 始终显示OverFlow溢出菜单 如果该机器拥有实体的menu键,则不在右侧显示溢出菜单,而改为按menu来生成 通过探测实体menu键的存在与否,来设置OverFlow一直显示 参考SplitActionBarActivity中的forceShowOverflowMenu方法,并在onCreate中进行调用Up Navigation返回上一页v 1、在Manifest里面添加上级Activityv 2、在onCreate方法中添加导航
41、设置 setHomeButtonEnabled:决定左上角的图标是否可以点击 setDisplayHomeAsUpEnabled:给左上角图标的左边加上一个返回的图标v 3、在onOptionsItemSelected中对android.R.id.home进行监听ActionBar的主题风格v 在AndroidManifest.xml里面的activity标签里面添加android:theme=android:style/Theme.Holo。v 常用主题: Theme.Holo Theme.Holo.Light Theme.Holo.Light.DarkActionBarv 自定义主题 th
42、eme.xml styles.xml练习菜单的用法Lecture 5导航导航内容提要TabHost导航的两种实现方式ActionBar+FragmentViewPager+Fragment实现滑动标签Tab导航TabHost导航的两种实现方式v 方式一:继承TabActivity 过程简单,但是导航栏样式简单,无法自定义v 方式二:自定义TabHost 方式较为复杂,但可以自定义导航栏的样式继承TabActivity实现导航v 步骤:v 1、创建导航Activity继承TabActivityv 2、调用getTabHost()得到该Activity的TabHost对象v 3、调用addTab(
43、)加入导航标签,每调用一次就加入一个导航标签 可设置文字、图标、点击后显示的布局或Activityv 4、若要监听导航条切换事件,需实现OnTabChangeListener接口,并重写onTabChanged(String tagString)方法继承TabActivity实现导航案例:继承TabActivity,实现不同Tab不同菜单功能详见:Chapter03UI2/MyTab.java自定义TabHost实现导航v 1、自定义Tabhost布局/Chapter3UI2/res/layout/custom_tab_host.xmlv 2、自定义TabIndicator布局/Chapter
44、3UI2/res/layout/tab_indicator.xmlv 3、创建类TabHostActivity继承自Activity或ActivityGroupv 4、为Activity设置视图setContentView(R.layout.custom_tab_host)v 5、通过findViewById实例化TabHost对象th自定义TabHost实现导航v 6、初始化TabHost对象 setup();当继承自Activity时 setup(LocalActivityManager activityGroup);当继承自ActivityGroup时v 7、通过th.newTabSpe
45、c()创建导航单,并通过setIndicator、setContent设置指示头和内容v 8、调用addTab()添加导航单案例:继承Activity,实现不同Tab加载不同Activity详见:Chapter03UI2/TabHostActivity.java自定义TabHost布局文件v 1、在XML资源文件中创建TabHost节点,它的ID可以自行定义v 2、创建TabWidget节点,用于显示导航标签,并设置ID为系统内置的android:id/tabsv 3、创建FrameLayout子节点,并用于显示内容,设置其ID为系统内置的android:id/tabcontent 有几个导航
46、标签,就要在FrameLayout中定义几组布局,可以是LinearLayout、RelativeLayout等等 当用来显示某个Activity时,不必在FrameLayout中再定义布局自定义导航标签XML文件 tab_indicator.xml普通的布局文件,一般显示图片和文字自定义标签点击效果 chat_tab_selector.xml常见错误v 空指针错误 原因:继承自Activity或ActiivtyGroup,未在addTab之前使用setup初始化TabHost 解决方法:在使用addTab之前,使用setup初始化TabHostv Did you forget to call
47、 public void setup(LocalActivityManager activityGroup)解决方法 原因1:未调用setup初始化 原因2:调用的setup类型与继承的父类不一致 解决方法:如果后面使用setContent(Intent )设置内容,必须继承自ActivityGroup,并且使用setup(LocalActivityManager activityGroup)初始化,如果setContent(int viewID)设置内容,则使用setup()初始化ActionBar+Fragment=Tab导航ActionBar+Fragment=Tab导航v tab对应不
48、同的Fragment,点击不同的Tab就切换到对应的Fragment1. 获取ActionBar:ActionBar actionBar = getActionBar()2. 设置AcitonBar的操作模式:ActionBar.NAVIGATION_MODE_TABS3. 调用AciontBar的newTab()生成ActionBar.Tab,更多设置setText、setIconActionBar+Fragment=Tab导航1. 实现 ActionBar.TabListener接口,重写一些函数:onTabSelected、onTabReSelected、onTabUnSelected
49、使用FragmentTransaction动态控制Fragment的呈现 replace、commit2. 为每个 ActionBar.Tab 添加ActionBar.TabListener.3. 调用addTab()将生成的Tab加入ActionBar中案例:继承Activity,不同Tab加载不同的Fragment详见:Chapter03UI2/ActionBarTab_Activity.javaViewPager+Fragment实现滑动标签页ViewPager介绍v ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。v PagerTabStr
50、ip类继承PagerTitleStrip类,当作ViewPager的选项卡,但必须作为ViewPager的子标签v 在Activity里实例化ViewPager组件,并设置它的Adapter 一般重写PagerAdapter 当与Fragment一起使用时,重写FragmentPagerAdapterViewPager的基本用法v 借助 android-support-v4.jar 包v 构建Activity的布局文件 basic_layout.xml 使用 标签添加ViewPager组件 添加子标签 ,作为选项卡v 创建Activity,实例化ViewPager及PagerTabStripv
51、 构建并为ViewPager添加PagerAdapter适配器,至少实现如下方法 getCount isViewFromObject instantiateItem destroyItemViewPager与Fragment结合v 官方建议将ViewPager与Fragment配合使用,实现不同页面独立布局及响应v 适配器采用FragmentPagerAdapter,至少实现下列方法 getCount getItemv 准备的数据 页面布局 fragment_viewpager_layout.xml 独立的Fragment类 ButtonFragment.java TestFragment.j
52、ava重写FragmentPagerAdapterv 重写FragmentPagerAdapter至少覆盖以下方法v getCount()public int getCount() return list.size();v getItem()public Fragment getItem(int arg0) return list.get(arg0);课外拓展v ActionBar和Fragment结合ViewPager实现TabActivityv http:/ http:/ http:/ http:/ Android开发技巧开发技巧实现底部图标文字的导航栏(已更实现底部图标文字的导航栏(已更
53、新)新) 练习导航栏的用法Lecture 6AdapterAdapter及及AdapterAdapter控件控件内容提要ArrayAdapterSimpleAdapterSimpleCursorAdapterBaseAdapter及自定义AdapterAdapter控件Adapter适配器v Adapter对象在Adapter控件和数据源之间扮演桥梁的角色。提供访问数据源的入口,把从数据源拿到的数据项逐项加载到Adapter控件中。v 四种Adapter适配器 ArrayAdapter SimpleAdapter SimpleCursorAdapter 自定义的Adapter(继承自BaseA
54、dapter)AutoCompleteTextView控件AutoCompleteTextView类继承自EditText类与EditText控件是一样的当用户输入了与事先为该控件定义的一组字符串集中相关的信息时,才会出现下拉选项,供用户选择示例讲解ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, CONTENT);autoTextView.setAdapter(adapter);/输入一个字母就开始自动提示autoTextView.setThreshold(1)
55、;String CONTENT = new StringChina,China1,china2,USA,USA1,USA2,唱歌,china,cd,ch,chi,chin;Spinner控件Spinner下拉列表,外观是一个一行的列表框,用户单击控件,下拉出选项列表供用户选择Spinner每次只显示用户选中的元素Spinner控件v 为Spinner加载数据的两种方式 方式1:在XML文件中先定义好要加载的数据资源,然后使用ArrayAdapter.createFromResource()把资源加载进来 方式2:直接在Java代码中使用ArrayAdapter对象,把List中的数据资源加载到
56、Spinner中v 事件监听onItemSelectedListener 使用setOnItemSelectedListener()方法设置监听,传入一个实现了Spinner.onItemSelectedListener接口的匿名内部类对象,同时实现接口的onItemSelected方法,通过传入的position参数完成匹配示例讲解private Spinner spinner;spinner = (Spinner) findViewById(R.id.spinner1);ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
57、 R.array.courses, android.R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter);spinner.setPrompt(请选择课程);spinner.setSelection(0, true);spinner.setOnItemSelectedListener()ListView控件v 以列表形式展示内容,并根据数据的长度自适应显示v 继承ListActi
58、vity或在Activity布局中加入ListView控件v 采用MVC模式将前端显示与后端数据分离 提供数据的List或数组相当于Model ListView相当于视图View Adapter对象相当于Controlv 指定Adapter对象,通过Adapter获取要显示的数据为ListView填充数据v 使用Adapter对象给ListView填充数据v ArrayAdapter:适用于列表项只含有文本信息的情况v SimpleAdapter:适用于每一个列表项中含有不同的子控件,比如图片+文本+按钮的v SimpleCursorAdapter:专门用来把一个Cursor中的数据映射到列表中,Cursor中的每一条数据映射为列表中的一项v 自定义Adapter:继承BaseAdapter,完全自定义数据适配方式,灵活性最强响应用户单击事件v setOnItemClickListener()绑定AdapterV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年办公楼清洁服务承包协议
- 2024年云计算平台服务独家供应协议
- 2024年个人代理记账服务合同
- 大班上学期科学教案:地球仪上的中国
- 2024年办公室文员合约
- 中班音乐详案教案及教学反思《捡豆豆》
- 2024年北京物联网技术服务条款
- 二年级上数学教案-认识时间(一)-人教新课标
- 2024年高考语文二轮复习:文学类文本群文阅读之双文短评(分层训练)(解析版)
- 《分与合》(教案)2023-2024学年数学一年级上册 人教版
- 2024-2030年中国射频芯片行业市场发展趋势与前景展望战略分析报告
- 华电线上测评
- 中国吡唑醚菌酯行业市场现状调查及前景战略研判报告
- 住院医师规范化培训日常考核评分表
- 《中华人民共和国监察法》知识测试题库
- 《城市轨道交通桥梁养护技术规范》
- 2024内蒙古事业单位联考招录(高频重点提升专题训练)共500题附带答案详解
- 《信息通信网络线务员》(综合布线装维员)理论考试题库大全-下(简答题)
- JGJ80-2016 建筑施工高处作业安全技术规范
- 构建水利安全生产风险管控六项机制工作指导手册2023版
- 2024年4月自考04737C++程序设计试题及答案含评分参考
评论
0/150
提交评论