好久没有写点东西了,最近接到 Flex4 研发任务,flex 自带组件功能比较弱,都要自己扩展,不像 ext ,都是定义好的组件,90% 以上需要用到的组件都不需要自己动手,直接可以使用,但这样也有个好处,把发挥的空间留给研发和美工,现成的东西再好看多了也会有审美疲劳的,而且千遍一律,未必是好现象,也不利于自身的提高,我想这也是一部分人宁愿用类似 jquery 之类的轻量级的框架也不用 ext 的原因,当然也有加载速度等原因。
不扯了,写了个类似 fieldset 的小东西,希望可以给需要的一点帮助。
package test
{
import flash.geom.Point;
import mx.core.IVisualElement;
import spark.components.Label;
import spark.components.VGroup;
public class MyVGroup extends VGroup
{
public function MyVGroup()
{
super();
}
private var vgtitle:Label; // 标题控件
private var _title:String; // 设置标题变量
private var _pad:int; // 设置自定义容器中添加的子控件与边框的距离,上边距*2
private var _pos:int; // 设置标题相对容器的 x 坐标
override protected function createChildren():void {
super.createChildren();
if (!vgtitle) {
vgtitle = new Label();
vgtitle.text = title;
addElement(vgtitle);
}
}
override protected function measure():void {
super.measure();
pad = pad <= 0 ? 10 : pad;
// 增加容器的大小
measuredWidth += pad * 2;
measuredHeight += pad;
// 设置子控件距离边框的距离
paddingLeft = pad;
paddingTop = pad * 2;
paddingRight = pad;
paddingBottom = pad;
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
// 清除自定义边框重画
graphics.clear();
super.updateDisplayList(unscaledWidth, unscaledHeight);
// 移动标题至目标位置
pos = pos <= 0 ? 18 : pos;
vgtitle.move(pos, 0);
//根据标题位置画出边框位置
graphics.lineStyle(1, 0x000000, 1.0);
graphics.moveTo(vgtitle.x - 2, vgtitle.height/2);
graphics.lineTo(0, vgtitle.height/2);
graphics.lineTo(0, unscaledHeight);
graphics.lineTo(unscaledWidth, unscaledHeight);
graphics.lineTo(unscaledWidth, vgtitle.height/2);
graphics.lineTo(vgtitle.x + vgtitle.width + 2, vgtitle.height/2);
}
public function get title():String {
return _title;
}
public function set title(value:String):void {
_title = value;
}
public function get pad():int {
return _pad;
}
public function set pad(value:int):void {
_pad = value;
}
public function get pos():int {
return _pos;
}
public function set pos(value:int):void {
_pos = value;
}
}
}
调用如下:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
xmlns:customgroup="test.*">
<s:layout>
<s:HorizontalLayout horizontalAlign="center" verticalAlign="middle"/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:VGroup>
<customgroup:MyVGroup title="文化程度">
<s:HGroup>
<s:CheckBox label="高中"/>
<s:CheckBox label="初中"/>
</s:HGroup>
<s:HGroup>
<s:CheckBox label="本科"/>
<s:CheckBox label="大专"/>
</s:HGroup>
<s:HGroup>
<s:CheckBox label="硕士"/>
<s:CheckBox label="博士"/>
</s:HGroup>
</customgroup:MyVGroup>
</s:VGroup>
</s:Application>
最后看看结果,大家觉得有什么要改进的可以一起讨论讨论:
- 大小: 10.2 KB
分享到:
相关推荐
Flex3自定义组件类似于Fieldset
- 自定义清空逻辑:可以通过JavaScript遍历表单元素并清空其值,实现自定义的清空功能。 7. **表单序列化与反序列化** - 序列化:`FormData`对象可以用来序列化表单数据,方便通过AJAX发送。 - 反序列化:在...
1. 使用Flexbox或Grid布局:CSS3的`display: flex`和`display: grid`可以方便地实现复杂布局,让表单元素在不同屏幕尺寸下都能保持良好的对齐和间距。 2. 响应式设计:通过媒体查询(`@media`),我们可以根据设备的...
- **按钮样式**:自定义按钮的背景色、边框、圆角和文字颜色,可以使用`:hover`、`:active`伪类来改变鼠标悬停和点击状态下的样式。 - **表单元素**:通过CSS控制输入框的边框、圆角、占位符颜色等,使其与B站的...
5. **自定义表单元素**:通过CSS的`appearance`属性,可以消除浏览器默认的样式,实现自定义的输入框、按钮等外观。 6. **浮动和清除**:在传统的CSS布局中,`float`属性用于创建多列布局,而`clear`属性用于清除...
6. **动画和过渡**:`transition`属性实现元素状态间的平滑过渡,`animation`属性允许自定义动画效果,如关键帧`@keyframes`。 7. **文字和字体**:CSS3支持更多的文字阴影、文本溢出处理、定制字体(@font-face)...
- **Flexbox方法**:将父容器的 `display` 属性设置为 `flex`,然后使用 `align-items: center;` 或 `justify-content: center;` 实现垂直或水平居中。 - **Grid方法**:设置 `display: grid;` 并使用 `align-...
你可以使用媒体查询(`@media`)和弹性盒子模型(`display: flex`)实现这一目标。 6. **实时工作版本** 提供的实时工作链接意味着项目还可能涉及到JavaScript和CSS,用于处理用户交互和美化样式。JavaScript可以用来...
通过使用媒体查询(`@media`)和弹性盒模型(`display: flex`或`grid`),可以实现自适应内容排列。 6. **框架和布局**:HTML5引入了新的标签如`<header>`、`<nav>`、`<main>`、`<article>`和`<footer>`,帮助构建...
4. 输入字段样式:自定义边框、背景色、占位符颜色等,使表单更具品牌风格。 5. 错误提示:用CSS创建样式化的错误信息,指导用户修正输入。 总的来说,"Survey-Form"项目是一个学习和实践HTML和CSS的实用示例,涵盖...