awtk/docs/trap_list.md
2020-08-03 22:00:47 +08:00

79 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 避坑指南
> 世间总是有坑的,可能是因为填坑很困难,也可能是因为填了这个坑就要挖另外一个坑。但是,有坑并不代表我们需要踩进去,绕开这些已知的坑,可以让生活更美好。当然,今天的坑,明天也许已经填了,定期阅读本清单,有助于身心健康。
把你踩过的坑告诉我们,我们尽力去填了它们,实在填不了,也可以列在这里,供大家参考:
--------
#### 1. 在 PC 上模拟运行时显示正常,而在开发板上出现局部残留的现象。
**原因**
* 脏矩形是根据控件的位置和大小 (x/y/w/h) 计算的,也就是超出范围的部分不会被重绘。
* 控件的文字和图片超出控件的范围时,一般是不会被裁剪的 (ScrollView 等控件除外)。
* 在 SDL 模式下,不启用脏矩形,所以在 PC 上可能是正常的。
**绕坑**
* 保持控件的文本和图片在控件自身的范围内。
--------
#### 2. 修改了主题描述文件,但是预览时没有任何效果。
**原因**
* 出于性能考虑AWTK 使用的是二进制格式的主题数据XML 格式的主题描述文件只是方便开发者编辑的。
* 修改了 XML 格式的主题描述文件,还需要将它转成二进制格式,预览时才会生效。
**绕坑**
* 使用脚本 update\_res.py 更新资源。
* 或者用命令 bin/themegen 将 XML 格式的主题数据转成二进制的主题数据。
--------
#### 3. 旋转/缩放动画对按钮无效
**原因**
* 几乎所有控件都支持平移和淡入淡出动画。
* 部分控件支持 value 改变的动画(如进度条)。
* 部分控件支持旋转/缩放的动画(目前只有图片支持)。
* 滚动动画通常只是用于控件内部实现(如 slide\_view、switch、scroll\_view 和 text\_selector 等)。
* 旋转/缩放的动画只是改变控件的显示效果,不改变控件的实际大小和位置(脏矩形和事件处理)。
**绕坑**
* 趋长(吉)避短(凶),平安幸福。
#### 4.widget\_move/widget\_resize/widget\_move\_resizes 操作无效。
**原因**
* 通常是设置 layout 参数,只要 layout 参数存在widget\_layout 被触发时,就会用该参数重新布局。
**绕坑**
* 如果你需要调用 widget\_move/widget\_resize/widget\_move\_resizes 修改控件的大小和位置,就不要设置 layout 参数。
#### 5. 为什么回调函数的行为很诡异?
```c
my_param_t param;
...
timer_add(on_timer, &param, interval);
```
**原因**
把临时变量 param 作为回调函数的上下文,回调函数在访问 param 时param 早就被释放了。
**绕坑**
动态分配或者使用全局变量。最好使用动态分配,但是要记得释放。
内存问题请参考我以前写的一篇博客:[大内高手—常见内存错误](https://blog.csdn.net/absurd/article/details/908601)