声明的方式编写可复用按钮
在编写可复用的自定义按钮中,通过增加背景图的方式编写了按钮。这种方式一般应用于按钮是很特殊的图形的时候。 如果仅仅是编写可复用的自定义按钮中的按钮,可以看出,有边界、背景有渐进色,那么可以通过声明的方式获得更好的可配置特性。 这是生成的按钮: 这是按下后的按钮: 发送文章为PDF
在编写可复用的自定义按钮中,通过增加背景图的方式编写了按钮。这种方式一般应用于按钮是很特殊的图形的时候。 如果仅仅是编写可复用的自定义按钮中的按钮,可以看出,有边界、背景有渐进色,那么可以通过声明的方式获得更好的可配置特性。 这是生成的按钮: 这是按下后的按钮: 发送文章为PDF
Android的布局,要比iOS复杂的多。如果想写出和iOS类似的交互体验,付出的代价往往要增加一个数量级。 现在有个正在开发的Android项目,里面已经有了一些不合理的UI实现方式。比如按钮是一张图: 可以看出,应该用编程的方式来实现这个按钮,比如xml声明drawable,一个矩形框,四个边是圆角,要有个很细的边框,黑色的,背景色使用渐进色效果。登录使用文字而不是在图形里。 这样的好处很多: 自由的在不同分辨率屏幕下做适配,不必考虑图形的长宽比; 当文字改动后,不必喊上美工一起加班处理; 文字的国际化。 日志引用声明的方式编写可复用按钮 发送文章为PDF
写这个例子的目的是供同事和开发Android的朋友学习借鉴。 这个版本不是凭空冒出来的,就像爱因斯坦做手工的故事(不知道的见这里)一样,还有更丑的“小凳子”,它们是: 简单使用SimpleCursorAdapter 在视图显示中使用Style 在视图显示中使用Theme android 1.6下使用Loader示例 参考它们可以了解版本的演进过程。可能降低学习曲线。 这个版本的首页: 点击条目,会弹出带图片的详细信息界面: 这里的图片是从维基百科直接下载的,并会缓存在本地。 另外,就是对横竖屏使用了不同的布局: 发送文章为PDF
android 3.0 sdk,引入了很多新api,比如Loader。和Fragment类似(编写兼容android1.6的fragment),该api也可在android 1.6以上版本执行。 以下介绍如何编写Loader,实现对ListView的异步加载。效果如图: 示例中有一个后台线程每隔3秒更新数据库的长江记录,将记录改为“长江”或“Long River”。ListView无需监控数据库变化,基于Loader,会自动更新。实际上这里面是观察者模式,无非是系统自带了,只需调用即可,无需自己构造观察者。 这个示例也是完整的sqlite+content provider+cursor adapter+listview+loader组合示例。 日志引用中国水系Android第一个版本 发送文章为PDF
在在视图显示中使用Style中,使用的是针对一个视图指定元素的样式。如果要针对整个Activity,对它的背景颜色和字体等做统一的样式约定,就需要使用另外一个技术,theme。 以下示例就是在在视图显示中使用Style基础上增加了theme。 日志引用中国水系Android第一个版本android 1.6下使用Loader示例 发送文章为PDF
如果视图界面风格需要统一的规划,就需要使用android视图技术中的style。这类似HTML技术和CSS技术的关系。 示例改编自简单使用SimpleCursorAdapter。示例截图如下: 日志引用中国水系Android第一个版本在视图显示中使用Theme 发送文章为PDF
如果使用Sqlite,建议和ContentProvider结合使用。这样数据库的生命周期就不用自己管了。然后,如果要在比如ListView中显示,可以使用CursorAdapter。简化的办法是使用子类SimpleCursorAdapter。 以下就介绍一下使用sqlite+content provider+cursor adapter的最简单实现示例。太简单了,示例如图: 日志引用中国水系Android第一个版本在视图显示中使用Style 发送文章为PDF
在通过声明方式在Android 3.0上使用Fragment中写的例子只能用在android3.0以上的版本。之前也测试过兼容1.6的方式,见编写最简单的Fragment。现在修改了android3.0的示例,可以兼容1.6版本了。 这是在nexus one 2.3.3下的截屏。项目本身使用的sdk是1.6。 日志引用android 1.6下使用Loader示例 发送文章为PDF
在编写最简单的Fragment中使用的环境是1.6到2.3的。为了比较正式的学习一下Fragment的使用,在Android 3.0平板模拟器上开发了一个示例: 使用Fragment可以有两种方式,即: 通过布局xml文件,将fragment声明到布局里,这样fragment生命周期和Activity是绑定的 通过编程方式,自己可以灵活处理在Activity内的fragment生命周期,缺点是可能因为复杂的生命周期管理带来不可预期的效果,比如[cref 4096]示例 日志引用编写兼容android1.6的fragment 发送文章为PDF
以下翻译自《Professional Android 2 Application Development》第四章Create user interfaces的Optimizing Layouts部分。 通过inflate在Activity中布局是个有性能消耗的过程。每增加一个嵌套的布局和视图都会对应用的性能造成很大的影响。 总之,好的实践是尽量保持布局尽可能简单,尤其是要避免嵌套inflate操作整个新的布局,这是为更新已经存在布局的小变化。 以下几点是包含在Android最佳实践指导原则里的,当然并不绝对: 避免不必要的嵌套:不要把一个布局放置在其他布局里,除非是必要的。 避免使用太多视图:在一个布局中每增加一个新的视图,都会在inflate操作时耗时和消耗资源。任何时候都不要在一个布局中包含超过80个视图,否则,消耗在inflate操作上的时间会很大。 避免深度嵌套:布局可以任意嵌套,这极易于创建复杂和深度嵌套的布局层次。如果没有硬性限制,将嵌套限制在10层以下是好的实践。 优化布局层次,比如减少没效率的或者不必要的嵌套布局,是十分重要的。 Android SDK包含了layoutopt,一个命令行工具,来辅助这个优化工作。运行该命令,参数是布局文件或者布局文件的目录,将分析并给出改善的建议。 发送文章为PDF
Patagonia Theme designed by Wp Themes Planet and proudly powered by WordPress