pub struct Space { /* private fields */ }Expand description
A Space creates empty space in layouts
Space is useful for creating gaps between UI elements or pushing elements apart. You can control its size using width, height, and layout params.
Implementations§
Source§impl Space
impl Space
Sourcepub fn view(&self) -> &View
pub fn view(&self) -> &View
Get the underlying View
Examples found in repository?
examples/space_demo_v2.rs (line 40)
8fn main() -> Result<()> {
9 println!("=== Space 空白间隔演示 (新库版本) ===\n");
10
11 // 创建 Activity(对话框模式)
12 let mut activity = Activity::new(true)?;
13 println!("✓ 连接建立\n");
14
15 // 创建主布局
16 let layout = activity.create_linear_layout(None)?;
17
18 // 创建标题
19 let title = activity.create_text_view("📐 Space 间隔演示", Some(layout.id()))?;
20 title.set_text_size(&mut activity, 26)?;
21 title.view().set_margin(&mut activity, 10)?;
22 title.view().set_height_wrap_content(&mut activity)?;
23 title.view().set_linear_layout_params(&mut activity, 0, None)?;
24
25 // ========== 示例1: 固定高度的间隔 ==========
26 let section1 = activity.create_text_view("示例1: 固定高度间隔", Some(layout.id()))?;
27 section1.set_text_size(&mut activity, 18)?;
28 section1.view().set_margin(&mut activity, 10)?;
29 section1.view().set_height_wrap_content(&mut activity)?;
30 section1.view().set_linear_layout_params(&mut activity, 0, None)?;
31 section1.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
32
33 let text1a = activity.create_text_view("这是第一个元素", Some(layout.id()))?;
34 text1a.view().set_margin(&mut activity, 5)?;
35 text1a.view().set_height_wrap_content(&mut activity)?;
36 text1a.view().set_linear_layout_params(&mut activity, 0, None)?;
37
38 // 创建一个 50dp 高度的 Space
39 let space1 = activity.create_space(Some(layout.id()))?;
40 space1.view().set_height(&mut activity, 50)?;
41 space1.view().set_linear_layout_params(&mut activity, 0, None)?;
42
43 let text1b = activity.create_text_view("这是第二个元素(上方有50dp间隔)", Some(layout.id()))?;
44 text1b.view().set_margin(&mut activity, 5)?;
45 text1b.view().set_height_wrap_content(&mut activity)?;
46 text1b.view().set_linear_layout_params(&mut activity, 0, None)?;
47
48 // ========== 示例2: 权重间隔(弹性空间)==========
49 let divider1 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
50 divider1.view().set_margin(&mut activity, 10)?;
51 divider1.view().set_height_wrap_content(&mut activity)?;
52 divider1.view().set_linear_layout_params(&mut activity, 0, None)?;
53
54 let section2 = activity.create_text_view("示例2: 权重间隔(填充剩余空间)", Some(layout.id()))?;
55 section2.set_text_size(&mut activity, 18)?;
56 section2.view().set_margin(&mut activity, 10)?;
57 section2.view().set_height_wrap_content(&mut activity)?;
58 section2.view().set_linear_layout_params(&mut activity, 0, None)?;
59 section2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
60
61 let text2a = activity.create_text_view("顶部内容", Some(layout.id()))?;
62 text2a.view().set_margin(&mut activity, 5)?;
63 text2a.view().set_height_wrap_content(&mut activity)?;
64 text2a.view().set_linear_layout_params(&mut activity, 0, None)?;
65
66 // 创建一个 weight=1 的 Space,它会占据所有剩余空间
67 let space2 = activity.create_space(Some(layout.id()))?;
68 space2.view().set_linear_layout_params(&mut activity, 1, None)?;
69
70 let text2b = activity.create_text_view("底部内容(被推到底部)", Some(layout.id()))?;
71 text2b.view().set_margin(&mut activity, 5)?;
72 text2b.view().set_height_wrap_content(&mut activity)?;
73 text2b.view().set_linear_layout_params(&mut activity, 0, None)?;
74
75 // ========== 示例3: 水平间隔 ==========
76 let divider2 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
77 divider2.view().set_margin(&mut activity, 10)?;
78 divider2.view().set_height_wrap_content(&mut activity)?;
79 divider2.view().set_linear_layout_params(&mut activity, 0, None)?;
80
81 let section3 = activity.create_text_view("示例3: 水平间隔", Some(layout.id()))?;
82 section3.set_text_size(&mut activity, 18)?;
83 section3.view().set_margin(&mut activity, 10)?;
84 section3.view().set_height_wrap_content(&mut activity)?;
85 section3.view().set_linear_layout_params(&mut activity, 0, None)?;
86 section3.set_text_color(&mut activity, 0xFFFF9800u32 as i32)?;
87
88 // 创建水平布局
89 let h_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
90 h_layout.view().set_margin(&mut activity, 5)?;
91 h_layout.view().set_height_wrap_content(&mut activity)?;
92 h_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
93
94 let btn1 = activity.create_button("按钮1", Some(h_layout.id()))?;
95 btn1.view().set_linear_layout_params(&mut activity, 0, None)?;
96
97 // 水平 Space,宽度30dp
98 let h_space = activity.create_space(Some(h_layout.id()))?;
99 h_space.view().set_width(&mut activity, 30)?;
100 h_space.view().set_linear_layout_params(&mut activity, 0, None)?;
101
102 let btn2 = activity.create_button("按钮2", Some(h_layout.id()))?;
103 btn2.view().set_linear_layout_params(&mut activity, 0, None)?;
104
105 // 弹性水平 Space(weight=1),把按钮3推到右边
106 let h_space2 = activity.create_space(Some(h_layout.id()))?;
107 h_space2.view().set_linear_layout_params(&mut activity, 1, None)?;
108
109 let btn3 = activity.create_button("按钮3", Some(h_layout.id()))?;
110 btn3.view().set_linear_layout_params(&mut activity, 0, None)?;
111
112 // ========== 底部说明 ==========
113 let divider3 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
114 divider3.view().set_margin(&mut activity, 10)?;
115 divider3.view().set_height_wrap_content(&mut activity)?;
116 divider3.view().set_linear_layout_params(&mut activity, 0, None)?;
117
118 let info = activity.create_text_view(
119 "💡 Space 用途:\n\
120 • 固定间隔:设置固定宽度/高度\n\
121 • 弹性间隔:使用 weight 填充空间\n\
122 • 推送元素:将元素推到边缘",
123 Some(layout.id())
124 )?;
125 info.view().set_margin(&mut activity, 10)?;
126 info.view().set_height_wrap_content(&mut activity)?;
127 info.view().set_linear_layout_params(&mut activity, 0, None)?;
128 info.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
129
130 println!("✓ 界面创建完成\n");
131 println!("━━━━━━━━━━━━━━━━━━━━━━");
132 println!("提示:");
133 println!(" • 观察不同类型的 Space 效果");
134 println!(" • Space 本身是不可见的");
135 println!(" • 使用 Space 可以精确控制布局");
136 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
137
138 // 事件循环
139 loop {
140 let event = read_message(activity.event_stream())?;
141 let event_type = event["type"].as_str().unwrap_or("");
142 let event_value = &event["value"];
143
144 match event_type {
145 "destroy" => {
146 // Activity 已被系统销毁,直接退出即可
147 println!("\n✓ Activity 已关闭");
148 return Ok(());
149 },
150 "click" => {
151 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
152
153 if clicked_id == btn1.id() {
154 println!("点击了按钮1");
155 info.set_text(&mut activity, "✅ 按钮1 被点击")?;
156 info.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
157 } else if clicked_id == btn2.id() {
158 println!("点击了按钮2");
159 info.set_text(&mut activity, "✅ 按钮2 被点击(左侧有30dp间隔)")?;
160 info.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
161 } else if clicked_id == btn3.id() {
162 println!("点击了按钮3");
163 info.set_text(&mut activity, "✅ 按钮3 被点击(被弹性Space推到右边)")?;
164 info.set_text_color(&mut activity, 0xFFFF9800u32 as i32)?;
165 }
166 },
167 _ => {}
168 }
169 }
170}Auto Trait Implementations§
impl Freeze for Space
impl RefUnwindSafe for Space
impl Send for Space
impl Sync for Space
impl Unpin for Space
impl UnwindSafe for Space
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more