1use termux_gui::{Activity, Result};
6use termux_gui::connection::read_message;
7
8fn main() -> Result<()> {
9 println!("=== Space 空白间隔演示 (新库版本) ===\n");
10
11 let mut activity = Activity::new(true)?;
13 println!("✓ 连接建立\n");
14
15 let layout = activity.create_linear_layout(None)?;
17
18 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 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 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 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 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 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 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 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 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 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 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 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}