实现的效果类似这样:
和上周实现的实现横向的类似Gallery的效果不同,那是用scrollview和tablelayout实现的,事后发现当横向滚屏选择图片的时候,如果有纵向位移,也会造成下面列表的纵向滚动。
Android Activity标题,默认情况下是个TextView,显示应用名称的文字。
如果想把标题定义为带图的或者比较复杂的界面效果,就要用到自定义Activity标题。
示例效果:
还是针对IMDb,它的图片部分是横向滚动的。
研究了一下,是用类似ScrollView和TableLayout来实现的。也就是说在ListView的Header部分(有关ListView实现,见为ListView增加Header中的分析),是一个横向的ScrollView,嵌套一个TableLayout布局,和内部的一个TableRow。
实现示例的效果:
要实现类似IMBd类似的布局。
可以看出它的列表上方的图片展示区和下面列表条目是一体的,在上下滚动的时候。而图片展示区不是列表条目。
有时候,看到android应用做的很好,想学习借鉴一下。比如看看配置文件或者manifest文件内容等等。
apk文件采用zip格式压缩,因此可以很容易解压缩。
问题是文本文件全部做了二进制处理。
如果只是想简单了解apk包的manifest信息,可以使用aapt命令:
不是我写的,原文见:http://www.codeshogun.com/blog/2009/04/16/how-to-implement-swipe-action-in-android/
其实以前自己也写过,见写了一个android带动画翻页效果的程序和编写android简单的手势切换视图示例。
看到上面的文档,以为能实现悬停的效果,比如Home Screen那样:
本文参考:http://androidappdocs.appspot.com/guide/topics/providers/content-providers.html
Android中的Content provider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。在android系统中,没有一个公共的内存区域,供多个应用共享存储数据。
Android提供了一些主要数据类型的Content provider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些android提供的Content provider。可以获得这些Content provider,查询它们包含的数据,当然前提是已获得适当的读取权限。
如果想公开自己的数据,那么可有两种办法:
- 创建自己的Content provider,需要继承ContentProvider类;
- 如果你的数据和已存在的Content provider数据结构一致,可以将数据写到已存在的Content provider中,当然前提是获取写该Content provider的权限。比如把OA中的成员通讯信息加入到系统的联系人Content provider中。
如果在content provider中使用小的二进制文件,可以参见在content provider中使用二进制数据。如果过大,可能会引起OutOfMemory错误。可以考虑把这些过大的文件保存在文件系统中,而不是sqlite数据库中。
本文实现代码的效果和在content provider中使用二进制数据中相同,区别是二进制的图像文件不再保存在sqlite数据库中,表中只保存一个特征码字符串,其实也可不用,直接用id。然后把图片保存在/data/data/your.package/files目录下。特征码就是用于定义该目录下具体的文件名的。
首先,修改表结构:
database.execSQL("create table if not exists emperors("
+ " id integer primary key autoincrement," + " name text,"
+ "dynasty text," + "start_year text," + "image text"
+ ");");
可以看到image字段使用文本型了。
在android的sqlite中,如果要处理二进制数据,就要用到blob类型。这也可以运用到content provider中。
实现了一个超丑陋的示例,在编写完整的Content provider示例基础上。
在在Content provider实现中使用SQLiteOpenHelper中实现的是特别简单的content provider,方法实现不全。下面给出一个实现比较全面的Content provider,当然也是很简单的。
使用UriMatcher
UriMatcher可以帮助开发者识别Uri。比如:
content://com.easymorse.cp.mycp/emperors
表示获取朝代列表集合。而:
content://com.easymorse.cp.mycp/emperors/1
表示其中的_ID值为1的一个特定的记录。
如果自己写分析Uri的代码,比较繁琐和重复。android提供了方便的工具类UriMatcher。