最近读cocoaui源代码有感
上半年为了做一个ios的应用,引入了cocoaui库,主要是用来布局ios界面,发现简化了不少代码和工作量。因为在写第一个ios应用的时候,用的代码布局,在适配4s和6的机型时候,几乎被搞死,大量的约束定义充斥在代码中,惨不忍睹。
cocoaui的作者是ssdb的作者ideawu,在微博里面比较活跃,有问题at他一般很快就会有回应。ssdb是一个类似于redis的nosql数据库;像这样一个在客户端和服务器领域都有建树的人还是很少的。我等普普通通的程序员,距离这种大神还是有一些距离,不过不能气馁,了解他们才能接近他们。除了羡慕他们解决问题的能力,还是要学习他们解决问题的思路,以及这种解决了问题还分享的精神。
记得大学的时候,每次学习新的语言的时候,总借用第三方库做一个词典,一个天气预报,计算器或者类似于游览器这样小工具等。比如词典使用百度词典api,游览器使用的webview,不过那个时候真的想过实现一个游览器,自己解析html+css。大学时候做xml的解析还是差很多的,最终也是一行代码也没有写,其实想想有很多xml解析库可以借鉴来使用的。
说说cocoaui的思路,在布局ios应用界面的时候,即没有使用xib,也没有使用storyboard;而是借用web的html+css来做ios的界面布局。整体思路就是借用libxml2库去解析的html标签,并且将其转换成对应的uibutton,uilabel,uiimage,uiview,放置到界面中,至于他们在界面的中的位置,则是通过解析css,然后去设置border,margin,padding,width,height,corlor,text;关于css的解析,作者写了两篇文章介绍,http://www.ideawu.net/blog/archives/912.html http://www.ideawu.net/blog/archives/868.html,有兴趣可以拜读一下,思路很清晰。
大家都在说ios的约束布局不适合人理解,可是大部分人还是去适应了。可是cocoaui的作者绕过ios的约束布局,借用web的div+css去实现流式布局,这真是给了我们一个很好的选择,同时也提供了一个解决问题的思路,不要陷入其中,而是跳出来从新选择其他的方式。当然能写cocoaui也是需要很深的技术功底的,比如css的解析。
按照这个思路,我们可以从新定义android的布局方式,不知道大家有没有想过android的布局文件是很邋遢的,或者说很啰嗦,很冗余。如果是一个小型应用;xml的配置文件大小几乎相当于整个代码文件的大小了。我们按照cocoaui的思路,也可以定义html+css的方式去布局。
1:在activity里面,引入xml文件。
2:使用dom4j去解析xml中的html标签,并且将这些标签转换成android的控件,比如input(type=button)的转换成Button,input(type=input)转换为edittext,span转换成textview,div转换成layout。
3:解析css文件,定义控件在界面中的位置,比如遇到margin:0 10 0 0,就去获取button的LinearLayout.LayoutParams,然后调用setMargins函数去设置button的margin,遇到padding:10 0 0 0,同理;遇到color;就去设置button的backgroundColor就可以;等等,就不一一列举。
这样是不是就从新定义了android的布局问题,我们甚至可以使用引用css的方式,去定义公用的css方式,这样能更能简化布局文件。也就解决了androidxml布局冗余的问题。
当然了,这只是一个思路,talk is cheap,show code!
最近读cocoaui源代码有感的更多相关文章
- 读Flask源代码学习Python--config原理
读Flask源代码学习Python--config原理 个人学习笔记,水平有限.如果理解错误的地方,请大家指出来,谢谢!第一次写文章,发现好累--!. 起因 莫名其妙在第一份工作中使用了从来没有接 ...
- session自己定义存储,怎样更好地进行session共享;读tomcat7源代码,org.apache.catalina.session.FileStore可知
session自己定义存储.怎样更好地进行session共享: 读tomcat源代码,org.apache.catalina.session.FileStore可知 一.详见: 方法1 public ...
- dotnet 读 WPF 源代码笔记 布局时 Arrange 如何影响元素渲染坐标
大家是否好奇,在 WPF 里面,对 UIElement 重写 OnRender 方法进行渲染的内容,是如何受到上层容器控件的布局而进行坐标偏移.如有两个放入到 StackPanel 的自定义 UIEl ...
- 读DataSnap源代码(一)
Delphi的DataSnap用了一段时间了,但一直感觉有些地方还不够了解,所以花时间阅读了源代码,特作此烂笔头. Datasnap是在之前的WebBorker基础上搭建的,DataSnap向导自动生 ...
- dotnet 读 WPF 源代码笔记 渲染收集是如何触发
在 WPF 里面,渲染可以从架构上划分为两层.上层是 WPF 框架的 OnRender 之类的函数,作用是收集应用程序渲染的命令.上层将收集到的应用程序绘制渲染的命令传给下层,下层是 WPF 的 GF ...
- 优化MySQL,还是使用缓存?读一篇文章有感
今天我想对一个Greenfield项目上可以采用的各种性能优化策略作个对比.换言之,该项目没有之前决策强加给它的各种约束限制,也还没有被优化过. 具体来说,我想比较的两种优化策略是优化MySQL和缓存 ...
- Personal Reading Assignment 2 -读推荐文章有感以及项目开发目前总结
在经过个人作业和结对作业的磨练和现在正在进行的团队作业的考验中,我对自己软件开发的一点得失有了些许感悟,同时读了老师推荐的文章后,自己也是有了一些感受. 首先在“No Silver Bullet”一文 ...
- 读DataSnap源代码(六)
具体分析一下DataSanp App与Rest, WebBroker App的不同,先看TDSHTTPService. **************************************** ...
- 读DataSnap源代码(五)
function TDSHTTPWebDispatcher.DispatchRequest(Sender: TObject; Request: TWebRequest; Response: TWebR ...
随机推荐
- Access to the path '20141211142713.gif' is denied.
给network service加上读写权限即可
- WIN7、WIN8 右键在目录当前打开命令行Cmd窗口(图文)
Win7系统大家习惯“Win+R”的组合键打开命令提示符. 通常右击文件夹是没有进入命令行 进入某个文件夹里面,先按住Shift键,然后鼠标右键,出现选项“在此处打开命令窗口(W)”也可以打开命令行. ...
- 使用tcpcopy拷贝线上流量压测测试环境
tcpcopy项目地址:https://github.com/session-replay-tools/tcpcopy 作者地址:http://blog.csdn.net/wangbin579 1:环 ...
- 用eclipse建立servlet工程
1.打开eclipse,选择[文件]|[新建]|[项目] 2.选择[Tomcat Project]后单击下一步,输入项目名[TestTomcat],选择下一步,将[Can update contex ...
- Navi.Soft30.产品.阅读导航
Navi.Soft30.Core类库.开发手册 Navi.Soft30.框架.WinForm开发手册 Navi.Soft30.框架.WebMVC开发手册 Navi.Soft30.框架.Mobile.开 ...
- WebRTC is for Losers:WebRTC是输家
该文章是引述,仅代表作者Dave Michels观点 WebRTC is for Losers WebRTC technology has fallen short on many of its pr ...
- jquery.pjax.js bug问题解决集锦
jquery.pjax 是一个很好的局部刷新插件,但实际应用过程是还是会有很多小问题,部分问题解决如下: 1.pjax 局部加载时候,IE 存在缓存问题,很容易理解,pjax是通过jquery的aja ...
- MYSQL校对规则
一.前言 有时候遇到这种情况,你用一个like语句查询,查到的结果中有一些并没有包含你查询的关键词的纪录:有时候遇到这种情况,你的数据库自作聪明的大小写不敏感,让你在更新时把大小写不同的两条记录都更新 ...
- 关于BigDecimal的使用
为什么使用BigDecimal 使用BigDecimal首先要注意到float,double是无法支持商业计算的.只能支持工程计算.即误差允许的计算.通常float占用4个字节,32位.double占 ...
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...