




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Unit 4. Android 生命周期 Android系统中的进程优先级由高到低 Android组件组件是可以调用的基本功能模块,Android应用程序就是由组件组成的Android系统有四个重要的组件,分别是Activity、Service、BroadcaseReceiver和ContentProviderActivity是Android程序的呈现层,显示可视化的用户界面,Android应用程序可以包含一个或多个Activity,一般在程序启动后会呈现一个Activity。Service用于没有用户界面,但需要长时间在后台运行的应用BroadcaseReceiver是用来接受并响应广播消息的组件ContentProvider是Android系统提供的一种标准的共享数据的机制,应用程序可以通过ContentProvider访问其他应用程序的私有数据,私有数据可以是存储在文件系统中的文件,也可以是SQLite中的数据库Activity表现为四种状态,分别是活动状态、暂停状态、停止状态和非活动状态Activity 事件的回调函数: protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy();Activity:Android系统提供了两种调试工具LogCat和DevTools,用于定位、分析及修复程序中出现的错误 LogCat程序调试原理1. 引入android.util.Log包2. 使用Log.v(),Log.d(),Log.i(),Log.w() 和 Log.e()五个函数在程序中设置“日志点”3. 当程序运行到“日志点”时,应用程序的日志信息便被发送到LogCat中4. 判断“日志点”信息与预期的内容是否一致E.g. final static String TAG = LOGCAT; Log.v(TAG,Verbose); DevTools是用于调试和测试的工具,包括了一系列用户各种用途的小工具Unit 5. Android 用户界面 常见的系统控件包括TextView、EditText、Button、ImageButton、Checkbox、RadioButton、Spinner、ListView和TabHostTextView:显示字符串,EditText是一个具有编辑功能的TextView相应的XML文件:Test.java:TextView txv=(TextView)findViewByID(R.id.TextView01);txv.setText(User:);ImageButton:将img1拷贝到/res/drawable文件夹下(R.java中自动更新) imageButton.setImageResource(R.drawable.img1);按钮响应点击事件:添加点击事件的监听器imageButton.setOnClickListener(new View.OnClickListener()public void onClick(View view)点击事件的回调函数txv.setText(ImageButton按钮);)每个View仅可以注册一个点击事件的监听器,如果使用setOnClickListener()函数注册第二个点击事件的监听器,之前注册的监听器将被自动注销.多个按钮注册到同一个点击事件的监听器上,代码如下:Button.OnClickListener buttonListener = new Button.OnClickListener()Overridepublic void onClick(View v) switch(v.getId()case R.id.Button01:textView.setText(Button按钮);return;case R.id.ImageButton01:textView.setText(ImageButton按钮);return; ; button.setOnClickListener(buttonListener); imageButton.setOnClickListener(buttonListener);CheckBox和RadioButton:怎样定义同组中的RadioButton?XML中: Test.java中:RadioButton radioButton1 =(RadioButton)findViewById(R.id.RadioButton01);RadioButton.OnClickListener rblistener=new RadioButton.OnClickListener()public void OnClick(View v)/process;radioButton1.setOnClickListener(rblistener);Spinner:(similar to ComboBox)Test.java:Spinner spinner=(Spinner)findViewById(R.id.Spinner01);Listlist=new ArrayList( );list.add(item1);list.add(item2);ArrayAdapteradapter=new ArrayAdapter ( this,android.R.layout.simple_spinner_item, list );/数组适配器能够将界面控件和底层数据绑定在一起 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);spinner.setAdapter(adapter);ListView:(垂直显示的列表控件)ListView listv=(ListView)findViewById(R.id.ListView01);Listlist=new ArrayList();List.add(item1);List.add(item2);ArrayAdapter adapter=new ArrayAdapter (this, android.R.layout.simple_list_item_1, list );listv.setAdapter(adapter);AdapterView.OnItemClickListener listvListener=new AdapterView.OnItemClickListener()public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) String msg =”;textView.setText(msg);TabHost:实现多个分页之间的快速切换(Similar to TabControl) 有几个tabpage就建立几个xmlTest.java:public class TabDemo extends TabActivity /普通的都是 extends Activity / 与以往继承Activity不同,TabActivity支持内嵌多个Activity或View public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); TabHost tabHost = getTabHost(); /获得Tab标签页的容器LayoutInflater.from(this).inflate(R.layout.tab1, tabHost.getTabContentView(),true);/LayoutInflater将tab1.xml文件中的布局转换为Tab标签页可以使用的View对象LayoutInflater.from(this).inflate(R.layout.tab2,tabHost.getTabContentView(),true);LayoutInflater.from(this).inflate(R.layout.tab3,tabHost.getTabContentView(),true);tabHost.addTab(tabHost.newTabSpec(TAB1).setIndicator(线性布局).setContent(R.id.layout01);/使用addTab()函数在tabHost上添加了第1个标识为TAB1的分页tabHost.addTab(tabHost.newTabSpec(TAB2).setIndicator(绝对布局).setContent(R.id.layout02);tabHost.addTab(tabHost.newTabSpec(TAB3).setIndicator(相对布局).setContent(R.id.layout03); 界面布局:声明Android程序的界面布局有两种方法:使用XML文件描述界面布局在程序运行时动态添加或修改界面布局用户既可以独立使用任何一种声明界面布局的方式,也可以同时使用两种方式使用XML文件声明界面布局的特点:将程序的表现层和控制层分离在后期修改用户界面时,无需更改程序的源代码可视化界面加快设计线性布局LinearLayout:如果垂直排列,则每行仅包含一个界面元素如果水平排列,则每列仅包含一个界面元素框架布局FrameLayout表格布局TableLayout:添加行为TableRow 相对布局(RelativeLayout):e.g.android:layout_below=id/labelandroid:layout_alignParentRight=true android:layout_toLeftOf=id/cancel android:layout_alignTop=id/cancel/声明与ID为cancel的元素在相同的水平位置绝对布局(AbsoluteLayout)android:layout_x=40dip android:layout_y=40dip 菜单:Android系统支持三种菜单:选项菜单(Option Menu)子菜单(Submenu)快捷菜单(Context Menu)选项菜单分为图标菜单(Icon Menu)& 扩展菜单(Expanded Menu)。图标菜单能同时显示文字和图标的菜单,最多支持6个子项,但不支持单选框和复选框扩展菜单是在图标菜单子项多余6个时才出现,是垂直的列表型仅有文字菜单重载Activity的onCreateOptionMenu()函数,才能在Android应用程序中使用选项菜单 public boolean onCreateOptionsMenu(Menu menu) menu.add(0,MENU_DOWNLOAD,0,下载设置);/MENU_DOWNLOAD=1/MenuItem android.view.Menu.add(int groupId, int itemId, int order, CharSequence title)menu.add(0,MENU_DOWNLOAD,0,下载设置).setIcon(R.drawable.download); .setShortcut(,d);/快捷键 return true; 重载onPrepareOptionsMenu()函数,能够动态的添加、删除菜单子项,或修改菜单的标题、图标和可见性等内容E.g.下面的代码是在用户每次打开选项菜单时,在菜单子项中显示用户打开该子项的次数 public boolean onPrepareOptionsMenu(Menu menu) MenuItem uploadItem = menu.findItem(MENU_UPLOAD); uploadItem.setTitle(上传设置: +String.valueOf(MenuUploadCounter); return true; onOptionsItemSelected ()函数能够处理菜单选择事件,且该函数在每次点击菜单子项时都会被调用public boolean onOptionsItemSelected(MenuItem item) switch(item.getItemId()/获取到被选择菜单子项的ID case MENU_DOWNLOAD: MenuDownlaodCounter+; return true; case MENU_UPLOAD: MenuUploadCounter+; return true; return false; 子菜单子菜单不支持嵌套,添加是使用addSubMenu()函数实现SubMenu uploadMenu = (SubMenu) menu.addSubMenu(0,MENU_UPLOAD,1,上传设置).setIcon(R.drawable.upload);uploadMenu.setHeaderIcon(R.drawable.upload);uploadMenu.setHeaderTitle(上传参数设置);uploadMenu.add(0,SUB_MENU_UPLOAD_A,0,上传参数A);uploadMenu.add(0,SUB_MENU_UPLOAD_B,0,上传参数B);快捷菜单选项菜单中的onCreateOptionsMenu()函数仅在选项菜单第一次启动时被调用一次快捷菜单的onCreateContextMenu()函数每次启动时都会被调用一次菜单选择事件的处理需要重载onContextItemSelected()函数,该函数在用户选择快捷菜单中的菜单子项后被调用,与onOptionsItemSelected ()函数的使用方法基本相同菜单在XML中的实现: 界面事件按键事件将传递给onKey()函数进行处理触摸事件将传递给onTouch()函数进行处理是否继续传递事件给其他处理函数是由事件监听器处理函数的返回值决定的,取决于监听处理函数返回值。按键事件:entryText.setOnKeyListener(new OnKeyListener()Overridepublic boolean onKey(View view, int keyCode, KeyEvent keyEvent) int metaState = keyEvent.getMetaState();int unicodeChar = keyEvent.getUnicodeChar();String msg = ; msg +=按键动作: + String.valueOf(keyEvent.getAction()+n;msg +=按键代码: + String.valueOf(keyCode)+n;msg +=按键字符: + (char)unicodeChar+n;msg +=UNICODE: + String.valueOf(unicodeChar)+n;msg +=重复次数: + String.valueOf(keyEvent.getRepeatCount()+n;msg +=功能键状态: + String.valueOf(metaState)+n;msg +=硬件编码: + String.valueOf(keyEvent.getScanCode()+n;msg +=按键标志: + String.valueOf(keyEvent.getFlags()+n;labelView.setText(msg);if (checkBox.isChecked()return true;elsereturn false;触摸事件:重载onTouch ()函数touchView.setOnTouchListener(new View.OnTouchListener()Overridepublic boolean onTouch(View v, MotionEvent event) /过程代码return true/false;)TextView touchView = (TextView)findViewById(R.id.touch_area);touchView.setOnTouchListener(new View.OnTouchListener() Override public boolean onTouch(View v, MotionEvent event) int action = event.getAction(); switch (action) case (MotionEvent.ACTION_DOWN): .break; case (MotionEvent.ACTION_UP): .break; case (MotionEvent.ACTION_MOVE): .break; return true; );Unit6 组建通信与广播消息v 简述Intent的定义和用途。Define: Intent可称为一个在不同组件之间传递的消息,这个消息在到达接收组件后,接收组件会执行相关的动作Intent的用途:1. 启动Activity和Service2. 在Android系统上发布广播消息Intent可以实现不同Activity之间的切换和数据传递启动Activity方式:显式启动,必须在Intent中指明启动的Activity所在的类Intent intent = new Intent(IntentDemo.this, ActivityToStart.class);startActivity(intent);AndroidManifest.xml中注册这两个Activity: 隐式启动, Android系统根据Intent的动作和数据来决定启动哪一个Activity,也就是说在隐式启动时,Intent中只包含需要执行的动作和所包含的数据,而无需指明具体启动哪一个Activity,选择权有Android系统和最终用户来决定Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse();startActivity(intent);如果需要将子Activity的部分信息返回给父Activity(先启动的),则可以使用Sub-Activity的方式去启动子Activity(后启动的)E.g.父Activity:setContentView(R.layout.main);btn1.setOnClickListener(new OnClickListener()/注册子启动Intent方式到btn1Public void onClick(View v)Intent intent = new Intent(ActivityComunication.this,SubActivity1.class);/第一个参数为当前应用程序上下文startActivityForResult(intent,Sub_index1);)Protected void onActivityResult(int requestCode, int resultCode, Intent data)/当子Activity关闭时,启动它的父Activity的onActivityResult()函数将被调用;super.onActivityResult(requestCode,resultCode,data);switch(requestCode)/检测是哪个Intent发回来的case Sub_index1:if(resultCode=RESULT_OK) Uri uriData=data.getData(); textView.setText(uriData.toString();break;case Sub_index2: break;SubActivity1.java中:setContentView(R.layout.subactivity1);btnOK.setOnClickListener(new OnClickListener()public void onClick(View view)String uriString = editText.getText().toString();Uri data = Uri.parse(uriString);Intent result = new Intent(null, data);setResult(RESULT_OK, result);/将Intent作为返回值,RESUIT_OK作为结果码,传递给父Activityfinish(); /关闭当前的子ActivitySubActivity2.java中:btnReturn.setOnClickListener(new OnClickListener()public void onClick(View view)setResult(RESULT_CANCELED, null);finish(););v 简述Intent过滤器的定义和功能。Define: Intent过滤器是一种根据Intent中的动作(Action)、类别(Categorie)和数据(Data)等内容,对适合接收该Intent的组件进行匹配和筛选的机制Function: Intent过滤器可以匹配数据类型、路径和协议,还包括可以用来确定多个匹配项顺序的优先级(Priority)应用程序的Activity组件、Service组件和BroadcastReceiver都可以注册Intent过滤器,则这些组件在特定的数据格式上就可以产生相应的动作v 3.简述Intent解析的匹配规则。Intent到Intent过滤器的映射过程称为“Intent解析”Intent解析可以在所有的组件中,找到一个可以与请求的Intent达成最佳匹配的Intent过滤器Intent解析的匹配规则:1. Android系统把所有应用程序包中的Intent过滤器集合在一起,形成一个完整的Intent过滤器列表2. 在Intent与Intent过滤器进行匹配时,Android系统会将列表中所有Intent过滤器的“动作”和“类别”与Intent进行匹配,任何不匹配的Intent过滤器都将被过滤掉。3. 把Intent数据Uri的每个子部与Intent过滤器的标签中的属性进行匹配.4. 如果Intent过滤器的匹配结果多于一个,则可以根据在标签中定义的优先级标签来对Intent过滤器进行排序,优先级最高的Intent过滤器将被选择.Unit8. 数据存储与访问 简单存储SharedPreferences是一种轻量级的数据保存方式通过SharedPreferences可以将NVP(Name/Value Pair,名称/值对)保存在Android的文件系统中,而且SharedPreferences完全屏蔽的对文件系统的操作过程SharedPreferences支持三种访问模式:私有、全局读、全局写读写都用getSharedPreferences()函数public static final String PREFERENCE_NAME = SaveSetting;public static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;/读&写SharedPreferences sharedPreferences = getSharedPreferences(PREFERENCE_NAME, MODE);/写SharedPreferences.Editor editor = sharedPreferences.edit();editor.putString(Name, Tom);editor.putInt(Age, 20);editor.putFloat(Height, );mit();/读String name = sharedPreferences.getString(Name,Default Name);int age = sharedPreferences.getInt(Age, 20);float height = sharedPreferences.getFloat(Height,);/第二个值是缺省值SharedPreferences文件就保存在/data/data/shared_prefs目录下数据库中信息以xml格式存储 文件存储内部存储1. openFileOutput()2. openFileInput()外部存储Android的外部存储设备指的是SD卡(Secure Digital Memory Card),是一种广泛使用于数码设备上的记忆卡SD卡使用的是FAT(File Allocation Table)的文件系统,不支持访问模式和权限控制使用/tools目录下的mksdcard工具创建SD卡映像文件资源文件将原始格式文件和XML文件分别存放在/res/raw和/res/xml目录下,供应用程序在运行时进行访问E.g. 读取/res/raw/raw_file.txt文件,并将内容显示在界面上inputStream = resources.openRawResource(R.raw.raw_file); byte reader = new byteinputStream.available(); while (inputStream.read(reader) != -1) displayView.setText(new String(reader,utf-8); ;E.g. 读取XML格式文件XmlPullParser parser = resources.getXml(R.xml.people); String msg = ;try while (parser.next() != XmlPullParser.END_DOCUMENT) String people = parser.getName(); String name = null; String age = null; String height = null;if (people != null) & people.equals(person) int count = parser.getAttributeCount(); for (int i = 0; i count; i+) String attrName = parser.getAttributeName(i); String attrValue = parser.getAttributeValue(i); if (attrName != null) & attrName.equals(name) name = attrValue; else if (attrName != null) & attrName.equals(age) age = attrValue; else if (attrName != null) & att
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-湖北-湖北动物检疫员五级(初级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖北-湖北印刷工三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-湖北-湖北不动产测绘员三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-河南-河南机械热加工四级(中级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-河南-河南城管监察员三级(高级工)历年参考题库典型考点含答案解析
- 2024版电子劳动合同云
- 2025年事业单位工勤技能-河北-河北房管员一级(高级技师)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西环境监测工五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江西-江西垃圾清扫与处理工五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏电工三级(高级工)历年参考题库含答案解析(5套)
- 昆明一中实验班数学试卷
- 2025年腾讯校招综合素质测评试题及答案
- 2025至2030中国旅游保险行业深度发展研究与企业投资战略规划报告
- 房屋应急维修管理办法
- 大隐静脉护理课件
- DB11-T 751-2025 住宅物业服务标准
- 高考改革培训
- 寺庙法会活动方案
- 2025至2030中国过程中的电机和驱动器行业产业运行态势及投资规划深度研究报告
- 粮食机收减损培训课件
- 2025年河北中考生物真题含答案
评论
0/150
提交评论