Druid Widget Gallery探索:所有内置组件展示

Druid Widget Gallery探索:所有内置组件展示

【免费下载链接】druid 【免费下载链接】druid 项目地址: https://gitcode.com/gh_mirrors/druid1/druid

概述

Druid是一个用Rust编写的跨平台UI框架,提供了丰富的内置组件库。本文将详细介绍Druid Widget Gallery示例中展示的所有UI组件,帮助开发者快速了解和使用这些组件构建应用界面。Widget Gallery示例位于druid/examples/widget_gallery.rs,通过网格布局展示了框架提供的各种核心组件。

基础组件

Label(标签)

Label组件用于显示文本内容,支持动态数据绑定。在示例中,Label通过闭包从应用状态中获取文本内容:

Label::new(|data: &AppData, _: &_| data.label_data.clone())

Label组件定义在druid/src/widget/label.rs,支持文本对齐、样式定制等功能。

Button(按钮)

Button组件用于响应用户点击事件,示例中实现了一个点击计数器功能:

Button::new("Click me!")
    .on_click(|_, data: &mut AppData, _: &_| data.clicked_count += 1)

Button组件定义在druid/src/widget/button.rs,支持自定义样式、图标和点击回调。

Checkbox(复选框)

Checkbox组件提供二进制选择功能,绑定到布尔类型数据:

Checkbox::new("Check me!").lens(AppData::checkbox_data)

Checkbox组件定义在druid/src/widget/checkbox.rs,可与Switch组件共享同一数据源。

数据展示组件

List(列表)

List组件用于垂直排列多个子组件,示例中展示了字符串列表:

List::new(|| {
    Label::new(|data: &String, _: &_| format!("List item: {}", data))
        .center()
        .background(Color::hlc(230.0, 50.0, 50.0))
        .fix_height(40.0)
        .expand_width()
})
.lens(AppData::list_items)

List组件定义在druid/src/widget/list.rs,支持动态数据更新和自定义子项渲染。

ProgressBar(进度条)

ProgressBar组件展示0-1范围内的进度值,配合按钮实现控制:

Flex::column()
    .with_child(ProgressBar::new().lens(AppData::progressbar))
    .with_child(Label::new(|data: &AppData, _: &_| format!("{:.1}%", data.progressbar * 100.0)))
    .with_child(Flex::row()
        .with_child(Button::new("<<").on_click(|_, data, _| data.progressbar = (data.progressbar - 0.05).max(0.0)))
        .with_child(Button::new(">>").on_click(|_, data, _| data.progressbar = (data.progressbar + 0.05).min(1.0)))
    )

ProgressBar组件定义在druid/src/widget/progress_bar.rs,支持自定义颜色和高度。

输入组件

TextBox(文本框)

TextBox组件提供文本输入功能,绑定到字符串类型数据:

TextBox::new().lens(AppData::editable_text)

TextBox组件定义在druid/src/widget/textbox.rs,支持多行输入、输入验证和格式化。

Slider(滑块)

Slider组件允许用户通过拖动来选择数值,示例中控制进度条的值:

Slider::new()
    .with_range(0.05, 0.95)
    .with_step(0.10)
    .lens(AppData::progressbar)

Slider组件定义在druid/src/widget/slider.rs,支持范围设置和步长控制。

Stepper(步进器)

Stepper组件提供增减按钮来调整数值:

Flex::row()
    .with_child(Stepper::new().lens(AppData::stepper))
    .with_child(Label::new(|data: &AppData, _: &_| format!("{:.1}", data.stepper)))

Stepper组件定义在druid/src/widget/stepper.rs,支持整数和浮点数类型。

RadioGroup(单选组)

RadioGroup组件提供互斥选项选择,绑定到枚举类型数据:

RadioGroup::column(vec![
    ("radio gaga", MyRadio::GaGa),
    ("radio gugu", MyRadio::GuGu),
    ("radio baabaa", MyRadio::BaaBaa),
])
.lens(AppData::radio)

RadioGroup组件定义在druid/src/widget/radio.rs,支持水平和垂直布局。

媒体组件

Image(图片)

Image组件显示位图图像,支持透明度和缩放模式:

Image::new(
    ImageBuf::from_data(include_bytes!("./assets/PicWithAlpha.png")).unwrap(),
)
.fill_mode(FillStrat::Fill)
.interpolation_mode(InterpolationMode::Bilinear)

示例中使用的图片资源位于druid/examples/assets/PicWithAlpha.png。Image组件定义在druid/src/widget/image.rs

Svg(矢量图)

Svg组件显示SVG格式图像,需要启用"svg"特性:

Svg::new(
    include_str!("./assets/tiger.svg")
        .parse::<SvgData>()
        .unwrap(),
)

示例中使用的SVG资源位于druid/examples/assets/tiger.svg。Svg组件定义在druid/src/widget/svg.rs

状态指示组件

Switch(开关)

Switch组件提供切换功能,与Checkbox共享同一数据源:

Switch::new().lens(AppData::checkbox_data)

Switch组件定义在druid/src/widget/switch.rs,适合在移动风格界面中使用。

Spinner(加载指示器)

Spinner组件显示加载状态动画:

Spinner::new().fix_height(40.0).center()

Spinner组件定义在druid/src/widget/spinner.rs,支持自定义大小和颜色。

布局组件

Flex(弹性布局)

Flex组件提供灵活的盒子布局,示例中大量使用:

Flex::column()
    .with_child(Button::new("Click me!"))
    .with_spacer(4.0)
    .with_child(Label::new(|data, _| format!("Clicked {} times!", data.clicked_count)))

Flex组件定义在druid/src/widget/flex.rs,支持水平和垂直方向,以及权重分配。

Scroll(滚动容器)

Scroll组件提供内容滚动功能,整个示例界面使用Scroll作为根容器:

Scroll::new(
    SquaresGrid::new()
        .with_cell_size(Size::new(200.0, 240.0))
        .with_spacing(20.0)
        // 添加所有子组件
)
.vertical()

Scroll组件定义在druid/src/widget/scroll.rs,支持水平和垂直滚动。

自定义布局

示例中实现了SquaresGrid自定义布局组件,用于网格排列子组件:

SquaresGrid::new()
    .with_cell_size(Size::new(200.0, 240.0))
    .with_spacing(20.0)
    .with_child(...)

SquaresGrid的实现代码位于druid/examples/widget_gallery.rs的第269-392行,展示了如何创建自定义布局容器。

总结

Widget Gallery示例展示了Druid框架的核心UI组件,涵盖了布局、输入、数据展示等方面。开发者可以通过druid/examples/widget_gallery.rs源码了解各组件的使用方法,通过docs/src/04_widget.md官方文档获取更多信息。所有组件均支持响应式设计,能够根据窗口大小和DPI自动调整布局和样式。

【免费下载链接】druid 【免费下载链接】druid 项目地址: https://gitcode.com/gh_mirrors/druid1/druid

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值