转载请说明原出处:http://blog.csdn.net/zhuhongshu/article/details/43816875
在QQ群里经常会有刚开始学习duilib的朋友加入,问到一些属性用法和布局问题。为了避免一遍一遍重复回答,今天写个入门文章,简单说一下刚开始学duilib需要注意的地方,和学习duilib的方法。
alberl写过《duilib入门简明教程》和《duilib进阶教程》,是很不错的入门教程。再搭配duilib自带的9个demo,就可以完整的学到duilib的各种功能了,所以强烈建议把这些都好好看看。很多人包括我都是看自带的demo去学习duilib,每个demo都描述了duilib的几样功能,9个demo几乎说明了duilib的所有功能。不过alberl的入门教程和9个demo中存在一些的不足,最要原因在于控件的属性和布局方面描述的不足,所以我这篇就重点说说控件和布局。
学duilib最重要的的就是了解各个控件和容器的属性和特性,以及如何布局。掌握这三点再加上一个基本的duilib框架,使用duilib就没大问题了。
学习控件:
入门教程和demo里已经把各种控件的用法都介绍了,但是经常在群里有人问某个属性的用法,其实在duilib的根目录,已经附带了《属性列表.xml》,这是非常有用的文件,我在写布局时一直会打开属性列表。属性列表里描述了各个控件的各种属性,以及每个控件会发出的消息类型。
不过遗憾的是,属性列表文件里面没有完全描述了所有控件的所有属性,里面存在疏漏。如果要知道控件的最完全的属性,方法就是打开duilib工程,打开你需要的控件的源文件,找到SetAttribute函数,duilib就是通过这个函数读取xml文件中控件的属性,然后赋值给真正的控件,所以这个函数里面有最完整的属性描述。
在我自己维护的duilib库里面,我也尽量把疏漏的以及我自己扩展的属性,都添加到了《属性列表.xml》,如果需要的话可以用我补充的属性列表。
实践检验真理,学习控件的用法的最好方法就是自己建立个工程,然后写一个xml文件,自己测试各个控件以及他们的属性的用法。duilib可以用xml来描述控件,当然也可以自己用c++代码动态添加控件并且设置属性。
动态添加控件很简单,new一个对应的控件,设置属性,然后调用容器的Add函数把这个新的控件添加进去。不过问题在于很多新手朋友,直接用SetAttribute函数或者ApplyAttributeList函数来给控件设置属性。强烈反对这种做法。这两个函数是duilib读取xml配置文件然后给控件设置属性的,他们实际上最终也是调用了控件的其他相关函数来完成属性的赋值。当我们动态创建控件时,应该直接调用某个属性对应的函数,这样效率和可读性上都要优于SetAttribute函数或者ApplyAttributeList函数。
学习布局:
我个人认为布局是初学duilib时最需要掌握的知识,我以前已经写关于布局的文章了《duilib各种布局的作用,相对布局与绝对布局的意义和用法》,说明了各个布局控件的作用,我也就不再重复写了。
不过我要特别特别特别特别特别强调一下,新入门duilib的朋友,学习duilib先把duilib的自带设计器先删掉,请自己用编辑用具手写布局。(实际上我是看到太多入门duilib的朋友问关于设计器的用法,实在受不了了才写了这篇博客)
不用设计器的原因如下:
1、duilib自带的设计器并不完善,本身存在不少bug,经常会自己崩溃,导致刚写的布局丢失
2、设计器支持的控件数量不足,很多控件都无法用设计器来描述
3、设计器导出的xml文件,用相当多的冗余代码,自己没有设置的属性却自己冒出来,或者设置过的属性最终却没有保存
4、设计器默认使用了绝对布局,也就是float属性为true
5、实际上手写布局会让你更好的了解各个控件和容器
用过duilib的设计器一段时间的朋友,一般都会因为上述原因放弃他,至少我认识的用duilib的朋友中没有一个用设计器的。说实话如果把duilib的布局都理解通了,不需要设计器,自己心中就能直接想到如何布局。所以说学习布局是特别重要的!
其实说实话,如果有设计器谁都想用,当前duilib的设计器可以让我们学习如何开发设计器。首先要感觉duilib的设计器的作者,因为写设计器是很麻烦很不容易的,只是它本身还开发的不够全面,我自己也没有能力开发好的设计器。如果有很棒的设计器我也很愿意使用,像vs那种~~
入门duilib的朋友常会问为什么我的窗体变大了但是里面的控件却不会自适应大小好位置。这就是我另外要强调的,入门duilib的朋友看看你的xml布局文件,没有特别的需求,强烈建议别用float属性和pos属性,原因我在布局的博文里说明了,应该多用相对布局。
总结:
如果能把demo认真学好,再理解控件和布局的用法,就可以开始使用duilib了。不过如果想用好duilib,那么阅读并且修改duilib的源码是必不可少的,因为duilib存在不少的bug,我博客的其他博文描述过一部分bug的修复,否则在使用duilib的时候出现了问题可能都找不到原因。怎么学习duilib的源码我就不说了,一共3万多行代码,只要愿意去读那就不是难事。
我维护的duilib和uilib下载地址:点击打开链接
Redrain 2015.2.14