• 1. Android 基础培训
  • 2. 1.Android简介 2.Android开发环境搭建 4.Android常用组件 3.Android应用程序解析
  • 3. 什么是AndroidAndroid是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统,它包括一个操作系统,中间件和一些重要的应用程序。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和Dalvik虚拟机,由C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。 Android简介
  • 4. Android发布的版本 Android Market Android版本分布现况Android开发者官网 Android开发者论坛 是针对手机内所内置的硬件设备而言 加速度计 陀螺议 : 磁力计 : 方位传感计 压力传感计 温度传感计 GPS NFC :近距离无线通信 智能手机的主要体现形式: Android 手机 Android简介
  • 5. 如何安装 Android SDK 和Eclipse 插件所需开发环境: JDK 5 或 JDK 6 (仅有JRE不够) 、Eclipse 3.6 () 下载用于在Eclipse 开发android应用的ADT 插件 在企业开发中,很多程序员使用Eclipse IDE作为应用的开发环境。为了使得Android应用的创建,运行和调试更加方便快捷。Android的开发团队专门针对Eclipse IDE定制了一个插件:Android Development Tools(ADT) 下载地址: http://dl.google.com/android/ADT-16.0.1.zip 安装 Eclipse 插件 (ADT) 启动 Eclipse,选择 Help > Install New Software,在出现的对话框里,点击Add按钮,在对话框的name一栏输入“ADT”, 然后点击Archive...,浏览和选择已经下载的ADT插件压缩文件。 点击 OK.。返回可用软件的视图,你会看到这个插件,然后选择Developer Tools (会选中下面的“Android Developer Tools”和 “Android Editors“),点击 Next,最后重启 Eclipse。 下载安装Android SDK: Android SDK包含了开发Android应用所依赖的jar文件、运行环境及相关工具。 下载地址: http://dl.google.com/android/android-sdk_r16-windows.zip 下载完SDK后,把.zip文件解压到你电脑上合适位置。启动 Eclipse,选择window->preferences,在打开的视图左边点击android,在右边的SDK Location中选择Android SDK所在位置。Android开发环境搭建
  • 6. 打开Eclipse,新建项目(点击FileNewProject),在项目列表中展开Android目录,选择Android Project,如下图:Android开发环境搭建 创建第一个Android应用
  • 7. 创建第一个Android应用
  • 8. 创建第一个Android应用
  • 9. 点击”finish”即可完成项目的创建,创建后的项目已经是一个可运行的Android应用,我们可以通过下面方式运行此应用: 点击工具栏上机器人形状的虚拟设备管理器(简称“AVD“),如下: 创建第一个Android应用
  • 10. 在打开的虚拟设备管理器中创建一个虚拟手机: 创建第一个Android应用
  • 11. 在项目上右键点击run as Android application,如下图:程序运行效果: 创建第一个Android应用
  • 12. Android应该程序文件组成src/ java原代码存放目录 gen/ 自动生成目录 gen目录下有一个Eclipse自动生成的一个R文件, 此文件对应用所用到的资源进行了全局索引 res/ 资源(Resource)目录 在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。具体请看ppt下方备注栏。 AndroidManifest.xml 项目清单文件 这个文件列出了应用程序所提供的功能,以后你开发好的各种组件需要在该文件中进行配置,如果应用使用到了系统内置的应用(如电话服务、互联网服务、短信服务、GPS服务等等),你还需在该文件中声明使用权限。Android应用程序解析
  • 13. Android应用程序解析 MVC 模式在Android应用中的体现 : View 层 : 布局:线性布局,帧布局,相对布局,绝对布局等 视图组件: 文本, 输入框,Button,列表,表格等 2. Controler层 Activity的生命周期
  • 14. Android应用程序解析 3. 界面的交互 输入事件 Activity的跳转 ----Intent
  • 15. Activity生命周期Activity的三个状态: 运行状态: 当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。它就是响应用户操作的Activity。 暂停状态: 当它上面有另外一个Activity,使它失去了焦点但仍然对用户可见时(如右图),它处于暂停状态。在它之上的Activity没有完全覆盖屏幕,或者是透明的,被暂停的Activity仍然对用户可见,并且是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接)。如果系统处于内存不足时会杀死这个Activity。 停止状态: 当它完全被另一个Activity覆盖时则处于停止状态。它仍然保留所有的状态 和成员信息。然而对用户是不可见的,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个Activity。 Android应用程序解析
  • 16. 这七个方法定义了Activity的完整生命周期。实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: Activity的完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。Activity在onCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源. Activity的可视生命周期自onStart()调用开始直到相应的onStop()调用结束。在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。 Activity的前台生命周期自onResume()调用起,至相应的onPause()调用为止。在此期间,Activity位于前台最上面并与用户进行交互。Activity生命周期Android应用程序解析
  • 17. Android应用程序解析 Android 其它组件 : Service : 不显示页面,适合做后台一些耗时的操作 BroadcastReceiver : 广播 ContentProvider : 内容提供者 , 用于进程间共享数据 Android 本地化存贮 : Shared Preferences : 共享参数 SQLite Databases : 数据库
  • 18. Android的状态栏通知(Notification)通知用于在状态栏显示消息,消息到来时以图标方式表示,如下: 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息。 发送消息的代码如下: //获取通知管理器 NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); int icon = android.R.drawable.stat_notify_chat; long when = System.currentTimeMillis(); //新建一个通知,指定其图标和标题 Notification notification = new Notification(icon, null, when);//第一个参数为图标,第二个参数为标题,第三个为通知时间 notification.defaults = Notification.DEFAULT_SOUND;//发出默认声音 Intent openintent = new Intent(this, OtherActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, openintent, 0);//当点击消息时就会向系统发送openintent意图 notification.setLatestEventInfo(this, “标题”, “我是内容", contentIntent); mNotificationManager.notify(0, notification);//第一个参数为自定义的通知唯一标识Android常用组件
  • 19. 对话框通知(Dialog Notification)当你的应用需要显示一个进度条或需要用户对信息进行确认时,可以使用对话框来完成。 下面代码将打开一个如右图所示的对话框: new AlertDialog.Builder(context) .setTitle(“android培训") .setCancelable(false) //设置不能通过“后退”按钮关闭对话框 .setMessage(“确定退出吗") .setPositiveButton("确认", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialoginterface, int i){ Uri uri = Uri.parse("http://www.itcast.cn/");//打开链接 Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }) .show();//显示对话框 上面代码采用的是一个链式调用,像setTitle()、setMessage()这些方法,他们的返回值都是当前对话框对象。Android常用组件
  • 20. 创建带单选项列表的对话框下面代码将打开一个如右上图所示的选项列表对话框: final String[] items = {"java", ".net", "php"}; new AlertDialog.Builder(SenderNotificationActivity.this).setTitle("选择语言") .setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); } }).show();//显示对话框 下面代码将打开一个如右下图所示的带单选框的列表对话框: final String[] items = {"java", ".net", "php"}; new AlertDialog.Builder(SenderNotificationActivity.this).setTitle("选择语言") .setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); dialog.cancel(); } }).show();//显示对话框 setSingleChoiceItems()的第二个参数是设置默认选项, 选项索引从0开始,-1代表不选择任何选项。Android常用组件
  • 21. 创建带多选项列表的对话框下面代码将打开一个如右下图所示的多选项列表对话框: final String[] items = {"java", ".net", "php"}; new AlertDialog.Builder(SenderNotificationActivity.this).setCancelable(false) .setTitle("选择语言") .setMultiChoiceItems(items, new boolean[]{false,true,false}, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { if(isChecked){ Toast.makeText(getApplicationContext(), items[which], Toast.LENGTH_SHORT).show(); } } }) .setPositiveButton("确认", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialoginterface, int i){ dialoginterface.dismiss(); } }) .show();//显示对话框Android常用组件
  • 22. 进度对话框(ProgressDialog)效果图: 使用代码ProgressDialog.show(ProgressDialogActivity.this, "请稍等", "数据正在加载中...", true);创建并显示一个进度对话框。 调用setProgressStyle()方法设置进度对话框风格。有两种风格: ProgressDialog.STYLE_SPINNER 旋体进度条风格 (为默认风格) ProgressDialog.STYLE_HORIZONTAL 横向进度条风格Android常用组件
  • 23. 单选框(RadioButton)效果图: 要完成单选框显示,我们需要使用到RadioGroup和RadioButton(单选框),RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框能被选中。(例子代码请见下方备注栏) RadioGroup.check(R.id.dotNet);将id名为dotNet的单选框设置成选中状态。 (RadioButton) findViewById(radioGroup.getCheckedRadioButtonId());//获取被选中的单选框。 RadioButton.getText();//获取单选框的值 调用setOnCheckedChangeListener()方法,处理单选框被选择事件,把RadioGroup.OnCheckedChangeListener实例作为参数传入Android常用组件
  • 24. 多选框(CheckBox)效果图: 每个多选框都是独立的,可以通过迭代所有多选框,然后根据其状态是否被选中再获取其值。 CheckBox.setChecked(true);//设置成选中状态。 CheckBox.getText();//获取多选框的值 调用setOnCheckedChangeListener()方法,处理多选框被选择事件,把CompoundButton.OnCheckedChangeListener实例作为参数传入Android常用组件
  • 25. 下拉列表框(Spinner)效果图: Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());获取下拉列表框的值 调用setOnItemSelectedListener()方法,处理下拉列表框被选择事件,把AdapterView.OnItemSelectedListener实例作为参数传入Android常用组件
  • 26. 拖动条(SeekBar)效果图: SeekBar.getProgress()获取拖动条当前值 调用setOnSeekBarChangeListener()方法,处理拖动条值变化事件,把SeekBar.OnSeekBarChangeListener实例作为参数传入Android常用组件
  • 27. 菜单(Menu)效果图: 重写Activity的onCreateOptionsMenu(Menu menu)方法,该方法用于创建选项菜单,在用户按下手机的“Menu”按钮时就会显示创建好的菜单,在onCreateOptionsMenu(Menu menu)方法内部可以调用Menu.add()方法实现菜单的添加。 重写Activity的onMenuItemSelected()方法,该方法用于处理菜单被选择事件 通过手机上提供的“MENU”按钮可以打开菜单,如果希望通过代码打开菜单,可以调用Activity的openOptionsMenu()方法。Android常用组件
  • 28. 进度条(ProgressBar) 在布局xml文件中添加进度条代码: 在代码中操作进度条: ProgressBar.setMax(100);//设置最大刻度 ProgressBar.setProgress(0);//设置进度条的当前刻度,如果进度条的最大刻度为100,当前刻度为50,进度条将进行到一半。Android常用组件
  • 29. 输入内容自动完成文本框(AutoCompleteTextView )AutoCompleteTextView和EditText组件类似,都可以输入文本。 但AutoCompleteTextView组件可以和一个字符串数组或List对象 绑定,当用户输入两个及以上字符时,系统将在 AutoCompleteTextView组件下方列出字符串数组中所有以输入 字符开头的字符串,这一点和www.google.com的搜索框非常相似, 当输入某一个要查找的字符串时,google搜索框就会列出以这个 字符串开头的最热门的搜索字符串列表。 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String[] names = {"老张", "老方", "老毕", "李明" , "李丽", "陈江", "abc", "acc"}; AutoCompleteTextView nameText = (AutoCompleteTextView)this.findViewById(R.id.name); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, names); nameText.setAdapter(adapter); }Android常用组件
  • 30. Android应用程序解析 Android 程序 概念 术语 Applications 一个Android应用程序其实就是由一个或者多个Activity组成。 它们被捆绑在一起并存放进.apk文件中,这就是Android应用程序。 Activity Stack 用户之所以能够从一个activity转到下一个activity,是因为Android系统针对activity而设计了一个线性的导航历史以供用户追溯访问,这就是activity栈,也称为back stack。当用户启动了一个新的activity,它就被添加进activity栈,以便按BACK键时能够返回到上一个activity。然而,用户不能按BACK键就直接返回到桌面(除非activity的前一个是桌面才可以)。          activity栈里面存放的只能是activity,而视图、窗体、菜单和对话框则不能。也就是说,如果你可以让用户从屏幕A跳转到屏幕B,当用户按BACK键时,他就应该会回到屏幕A,那屏幕A必须是一个activity。有个例外情况就是,你的应用程序需要利用BACK键控制自身的导航,那就要自己重新设定BACK键的导航功能。
  • 31. Android应用程序解析 Intent Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。应用的响应性(Responsive)在Android中,应用的响应性被活动管理器(Activity Manager) 和窗口管理器(Window Manager)这两个系统服务所监视。 当用户触发了输入事件(如键盘输入,点击按钮等), 如果应用5秒内没有响应用户的输入事件,那么,Android会认 为该应用无响应,便弹出ANR(Application No Response) 对话框。如右图。 在正常情况下,Android程序会在一条单线程里运行。如果Activity要处理一件比较耗时的工作,应该交给子线程完成,否侧会因为主线程被阻塞,后面的用户输入事件因没能在5秒内响应,导致应用出现ANR对话框。Android 程序 概念 术语