细说安卓系统开发.pdf
Android 应用开发培训王 雪明 sUI的观念与变革2009 copyright eoeM区别于桌面系统的窗体屏幕尺寸的限制适合手指触摸的操作体验菜单(menu)对话框(Dialog)提示信息(Toast&Notification)UI 简单就是好2009 copyright eoeM简化的界面和人机交互流程独特的UI组件设计使用少量的组件,创建良好的操作体验Android 基础UI组件2009 copyright eoeM常用组android.widget.TextViewandroid.widget.Buttonandroid.widget.EditTextandroid.widget.CheckBoxandroid.widget.RadioButtonandroid.widget.RadioGroupandroid.widget.ToggleButtonUI组件 可以自定义风格Android 基础UI组件2009 copyright eoeMandroid.widget.Spinnerandroid.widget.AutoCompleteTextViewAndroid 基础UI组件2009 copyright eoeMandroid.widget.TimePickerandroid.widget.DatePickerAndroid 基础UI组件2009 copyright eoeMandroid.widget.ExpandableListViewandroid.widget.ListViewAndroid 基础UI组件2009 copyright eoeMandroid.widget.Galleryandroid.widget.ImageSwitcherandroid.widget.GridViewAndroid 基础UI组件2009 copyright eoeMandroid.widget.ProgressBarandroid.widget.RatingBarAndroid 基础UI组件2009 copyright eoeMandroid.widget.Toastandroid.widget.TabWidgetAndroid 基础UI组件2009 copyright eoeMmenu:如何打造友好的菜单ListView:用好列表,做好程序Dialog:人机友好互动交流Toast和Notification:温馨的提醒Android的菜单Menu2009 eoeMmenu负责管理MenuItem添加一个menuItemadd(int groupId,int itemId,int order,CharSequence title)删除所有的menuItemclear()MenuItem一个菜单的条目常用的方法:setTitlesetIcongetItemId()Android 菜单Menu(2)2009 eoeM1.)通过代码创建Menupublic boolean onCreateOptionsMenu(Menu menu)/分组id,Item的id,顺序,名字menu.add(0,M_FBACK,0,反馈).setAlphabeticShortcut(F);menu.add(0,M_HELP,1,帮助).setAlphabeticShortcut(H).setIcon(android.R.drawable.ic_menu_help);return true;Android 菜单Menu(3)2009 eoeM2.)通过xml创建Menu在Android工程的res/目录下新增一个menu/子目录,然后建立option_menu.xml文件onCreateOptionsMenu()方法里通过MenuInflater类引入定义好的菜单文件Android 菜单Menu(4)2009 eoeMoption_menu.xml文件 Android 菜单Menu(5)2009 eoeMonCreateOptionsMenu()实现menupublic boolean onCreateOptionsMenu(Menu menu)MenuInflater inflater=getMenuInflater();inflater.inflate(R.menu.option_menu,menu);return true;Android 菜单Menu(6)2009 eoeMAndroid 菜单Menu(7)2009 eoeM3.)处理Menu响应事件我们定义的菜单项的id会保存到R类文件里当我们点击菜单时,框架会捕获被点击的MenuItem组件,传递给相应的处理方法onOptionsItemSelected()方法用来处理事件Android 菜单Menu(8)2009 eoeMonOptionsItemSelected()添加响应事件public boolean onOptionsItemSelected(MenuItem item)switch(item.getItemId()case R.id.help_menu:Toast.makeText(this,你选中的是 帮助 菜单!,Toast.LENGTH_SHORT).show();break;case R.id.open_menu:Toast.makeText(this,你选中的是 反馈 菜单!,Toast.LENGTH_SHORT).show();break;return true;2009 eoeMAndroid 菜单Menu(9)Android的列表ListView2009 eoeM什么是ListView?ListView可以按设定的规则自动填充并展示一组数据列表Android 列表ListView2009 eoeM创建一个最简单列表xml布局方式 获得引用 listView=new ListView(Context context);listView=(ListView)findViewById(myList);设置一个适配器ListAdapter listView.setAdapter(ListAdapter adapter);显示ListView setContentView(listView);Android 列表ListView2009 eoeMAdapter 是ListView和数据源的中间人Android 列表ListView2009 eoeMAdpter深入分析当每条数据进入看见区域时Adapter的getView()会被调用返回展示数据的View视图但滚动屏幕时,会频繁调用上面步骤可以支持上千条数据的显示Android 列表ListView2009 eoeMAdpter深入分析Android 的对话框 Dialog2009 eoeM什么是Dialog?实现一个AlertDialog2009 eoeM生成AlertDialog三步走生成一个AlertDialog的构造者AlertDialog.Builder AlertDialog.Builder builder=new AlertDialog.Builder(context);设置属性,包括标题、按钮和图标builder.setIcon();builder.setTitle();builder.setPositiveButton();builder.setNegativeButton();最后生成AlertDialog builder.create();Dialog的生命周期2009 eoeM创建个性化对话框2009 eoeM继承Dialog重写onCreate()方法。setTitle():设置标题setContentView():设置内容Android 温馨提醒 Toast2009 eoeMToast是什么?Toast是Android提供的 轻量级的提醒机制Toast永远不会获得聚焦不会打断用户当前的操作信息在floating view呈现,然后会自动消失Android 温馨提醒-Toast2009 eoeM如何创建Toast1.)简单文字信息通过make()方法创建Toast信息调用show()方法来显示Toast提示信息2.)复杂Toast信息Toast支持通过setView(view)添加view组件Android 温馨提醒-Toast(2)2009 eoeMAndroid 温馨提醒 Notification2009 eoeMNotification是Android提供的在状态栏的提醒机制Notification同样不会打断用户当前的操作Notification支持更复杂的点击事件响应NotificationManager来管理创建Notification2009 eoeM创建Notification的四大步骤 1.)得到一个NotificationManager的引用:String ns=Context.NOTIFICATION_SERVICE;NotificationManager nManager=(NotificationManager)getSystemService(ns);2.)初始化一个Notificationint icon=R.drawable.notification_icon;CharSequence tickerText=Hello;long when=System.currentTimeMillis();Notification notification=new Notification(icon,tickerText,when);如何创建Notification2009 eoeM 3.)设置Notification的参数:Context context=getApplicationContext();CharSequence contentTitle=My notification;CharSequence contentText=Hello World!;Intent notificationIntent=new Intent(this,MyClass.class);PendingIntent pIntent=PendingIntent.getActivity(this,0,notificationIntent,0);notification.setLatestEventInfo(context,contentTitle,contentText,pIntent);4.)显示一个Notificationprivate static final int HELLO_ID=1;nManager.notify(HELLO_ID,notification);