入门学习duilib的要点

转载请说明原出处: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

时间: 2024-10-10 10:56:08

入门学习duilib的要点的相关文章

JNI入门-学习笔记

JNI入门-学习笔记 可执行文件 Windows - *.exe | linux - *.elf c函数库文件 Windows - *.dll | linux - *.so 批处理文件 Windows - *.bat | linux - *.sh 工具 NDK -- native developer kits Cygwin -- Linux系统模拟器 安装过程要点: ——安装时可以联网安装也可以通过本地文件安装(如果有本地文件) ——Select Packages:没必要全部安装,安装Devel

android JNI入门-学习笔记

JNI入门-学习笔记 可执行文件 Windows - *.exe | linux - *.elf c函数库文件 Windows - *.dll | linux - *.so 批处理文件 Windows - *.bat | linux - *.sh 工具 NDK -- native developer kits Cygwin -- Linux系统模拟器 安装过程要点: --安装时可以联网安装也可以通过本地文件安装(如果有本地文件) --Select Packages:没必要全部安装,安装Devel

2018年最新Linux云计算入门学习路线图

近年来,Linux在技术行业里的重要性越来越高,成为了IT从业者的必备技能之一,据统计,Linux相关岗位增长达到了惊人的24%.市场需求扩大后Linux技术人员的薪资也一路上升,1-3年Linux运维工程师的平均薪资上升了13%. 因为几年来很多人都选择转行从事Linux运维行业,入门学习的需求很旺盛,在这几年中也出现了不少对新手非常友好的入门学习路线图.然而从2017年中段开始,Linux运维的技能需求变化很大,这些入门学习路线路线图大部分已经不适应新时代的技能需求了.举例而言,Kubern

Retrofit 入门学习

Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } 这些注解都有一个参数 value,用来配置其路径,比如示例中的 users/{user}/repos, 我们还注意到在构造 Retrofit

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

[Todo] Nodejs学习及Spider实验(包括php入门学习、React入门学习)

/Users/baidu/Documents/Data/Interview/Web-Server开发 深入浅出Node.js-f46c http://blog.csdn.net/u012273376/article/details/52736906 利用nodejs做爬虫 http://www.runoob.com/nodejs/nodejs-callback.html nodejs学习之路 http://www.runoob.com/php/php-tutorial.html php学习之路

JavaSE入门学习24:Java面向对象补充

一Java中的Object类 Object类是所有Java类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认 继承Object类. public class Person{ // } //等价于 public class Person extends Object{ // } Object类中的方法,适合所有子类. 1)toString()方法 在Object类中定义有public String toString()方法,其返回值是String类型,描述当前对

js入门学习

在HTML,CSS学习的最后,开始入门学习javascript, 首先就是去了解它的用途 作用:使web页面能够与用户交互,作为控制浏览器给网页增添活力的方法 定义:它是一种脚本语言,作用于浏览器.和java没有半毛钱关系,主要是当时Netscape公司为了增加影响力改了名,,(是不是感觉很无耻) ps:区分程序的一种方式:1.客户端程序(client-side),像javascript就是,我觉得HTML,CSS应该也是. 2.服务器端程序(server-side),java,perl,php

mybatis入门学习

一.mybaits简介 java程序中常用的数据库框架. 二.mybait入门学习 1.环境 创建一个java或者javaweb项目:我是创建了一个structs项目,helloworld 2.添加相应的jar包