《Android技巧汇总情况1》由会员分享,可在线阅读,更多相关《Android技巧汇总情况1(68页珍藏版)》请在金锄头文库上搜索。
1、word 目录 10. 入门实例剖析121.在测试时,如何实现一个提示82.可以使用AlertDialog.Builder 才产生一个提示框.94.menu 的用法.101. 简单的代码102. menu实现的两种方法105.Activity 的切换141. 代码142. 详解:15UILayout191. AbsoluteLayout197. Tab以及 HostTab操作208. List (图片/按钮/标题/文本)26LIST例一27LIST例二36LIST例三409. 调用浏览器 载入某网址4310.监控应用程序包的安装&删除43方法一:43方法二:4611. 使用Toast输出一个字
2、符串5212. 把一个字符串写进文件5213. 把文件容读出到一个字符串5414. 调用Android installer 安装和卸载程序5515. 结束某个进程5516. 设置默认来电铃声5617. 开机自启动5718. 线程与子线程58handlerMessage实例5819. Service601. 什么是Service602. 如何使用Service603. Service的生命周期66附) 常用界面截图:67提示167提示268菜单680. 入门实例剖析1开卷语俗话说,“熟读唐诗三百首,不会作诗也会吟”。最近收集了很多Android的示例代码,从这些代码的阅读和实验中学习到很多知识,
3、从而产生写这个系列的打算,目标就是一步步跟着实例进行动手实作,真正从“做”中体会和学习Android开发。 本文目标是Android自带的一个例程序:记事本, 预备知识搭建开发环境,尝试编写”Hello World”,了解Android的基本概念,熟悉Android的API(官方文档中都有,不赘述)。程序截图先来简单了解下程序运行的效果 1 2 3 4程序入口点类似于win32程序里的WinMain函数,Android自然也有它的程序入口点。它通过在AndroidManifest.xml文件中配置来指明,可以看到名为NotesList的activity节点下有这样一个intent-filter
4、,其action为android.intent.action.MAIN,Category指定为 android.intent.category.LAUNCHER,这就指明了这个activity是作为入口activity,系统查找到它后,就会创建这个activity实例来运行,若未发现就不启动(你可以把MAIN改名字试试)。NotesList详解就从入口点所在的activity(见图1)开始,可以看到这个activity最重要的功能就是显示日志列表。这个程序的日志都存放在Sqlite数据库中,因此需要读取出所有的日志记录并显示。先来看两个重要的私有数据,第一个PROJECTION字段指明了“日志
5、列表“所关注的数据库中的字段(即只需要ID和Title就可以了)。privatestaticfinal String PROJECTION =new String Notes._ID, / 0 Notes.TITLE, / 1 ;第二个字段COLUMN_INDEX_TITLE指明title字段在数据表中的索引。privatestaticfinalint COLUMN_INDEX_TITLE =1;然后就进入第一个调用的函数onCreate。 Intent intent = getIntent(); if (intent.getData() =null) intent.setData(Notes
6、.CONTENT_URI); 因为NotesList这个activity是系统调用的,此时的intent是不带数据和操作类型的,系统只是在其中指明了目标组件是Notelist,所以这里把”保存到intent里面,这个URI地址指明了数据库中的数据表名(参见以后的NotePadProvider类),也就是保存日志的数据表notes。 Cursor cursor = managedQuery(getIntent().getData(), PROJECTION, null, null, Notes.DEFAULT_SORT_ORDER); 然后调用managedQuery函数查询出所有的日志信息,这
7、里第一个参数就是上面设置的”这个URI,即notes数据表。PROJECTION 字段指明了结果中所需要的字段,Notes.DEFAULT_SORT_ORDER 指明了结果的排序规则。实际上managedQuery并没有直接去查询数据库,而是通过Content Provider来完成实际的数据库操作,这样就实现了逻辑层和数据库层的分离。SimpleCursorAdapter adapter =new SimpleCursorAdapter(this, R.layout.noteslist_item, cursor, new String Notes.TITLE , newint android
8、.R.id.text1 ); setListAdapter(adapter); 查询出日志列表后,构造一个CursorAdapter,并将其作为List View的数据源,从而在界面上显示出日志列表。可以看到,第二个参数是R.layout.noteslist_item,打开对应的noteslist_item.xml文件, 就是用来显示一条日志记录的TextView,最后两个字段指明了实际的字段映射关系,通过这个TextView来显示一条日志记录的title字段。处理“选择日志”事件既然有了“日志列表”,就自然要考虑如何处理某一条日志的单击事件,这通过重载onListItemClick方法来完成
9、, Override protectedvoid onListItemClick(ListView l, View v, int position, long id) Uri uri = ContentUris.withAppendedId(getIntent().getData(), id); String action = getIntent().getAction(); if (Intent.ACTION_PICK.equals(action) | Intent.ACTION_GET_CONTENT.equals(action) / The caller is waiting for u
10、s to return a note selected by / the user. The have clicked on one, so return it now. setResult(RESULT_OK, new Intent().setData(uri); else / Launch activity to view/edit the currently selected item startActivity(new Intent(Intent.ACTION_EDIT, uri); 首先通过”和日志的id 号拼接得到选中日志的真正URI,然后创建一个新的Intent,其操作类型为In
11、tent.ACTION_EDIT,数据域指出待编辑的日志URI(这里只分析else块)。Intent深度剖析那么,上面这句startActivity(new Intent(Intent.ACTION_EDIT, uri)执行后会发生什么事情呢?这时候Android系统就跳出来接管了,它会根据intent中的信息找到对应的activity,在这里找到的是NoteEditor这个activity,然后创建这个activity的实例并运行。那么,Android又是如何找到NoteEditor这个对应的activity的呢?这就是intent发挥作用的时刻了。new Intent(Intent.ACTION_EDIT, uri)这里的Intent.ACTION_EDIT=”,另外通过设置断点,我们看下这里的uri值:然后我们再来看下Androidmanfest.xml,其中有这个provider 发现没有?它也有.google.provider.NotePad,这个是content:/.google.provider.NotePad/notes/1的一部分,同时!- This filter says that we can vie