frame_layout_demo_v2/
frame_layout_demo_v2.rs1use termux_gui::{Activity, Result};
6use termux_gui::connection::read_message;
7
8fn main() -> Result<()> {
9 println!("=== FrameLayout 帧布局演示 (新库版本) ===\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("🎭 FrameLayout 演示", 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 desc = activity.create_text_view("FrameLayout 按添加顺序层叠显示子视图", Some(layout.id()))?;
27 desc.view().set_margin(&mut activity, 5)?;
28 desc.view().set_height_wrap_content(&mut activity)?;
29 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 let section1 = activity.create_text_view("示例1: 文本层叠", Some(layout.id()))?;
33 section1.set_text_size(&mut activity, 18)?;
34 section1.view().set_margin(&mut activity, 10)?;
35 section1.view().set_height_wrap_content(&mut activity)?;
36 section1.view().set_linear_layout_params(&mut activity, 0, None)?;
37 section1.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
38
39 let frame1 = activity.create_frame_layout(Some(layout.id()))?;
41 frame1.view().set_margin(&mut activity, 10)?;
42 frame1.view().set_height(&mut activity, 150)?;
43 frame1.view().set_width_match_parent(&mut activity)?;
44 frame1.view().set_linear_layout_params(&mut activity, 0, None)?;
45
46 let layer1 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━\n第一层(底层)", Some(frame1.id()))?;
49 layer1.set_text_size(&mut activity, 20)?;
50 layer1.view().set_margin(&mut activity, 5)?;
51 layer1.set_text_color(&mut activity, 0xFFFF5722u32 as i32)?;
52
53 let layer2 = activity.create_text_view("\n\n 第二层(中层)", Some(frame1.id()))?;
55 layer2.set_text_size(&mut activity, 20)?;
56 layer2.view().set_margin(&mut activity, 5)?;
57 layer2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
58
59 let layer3 = activity.create_text_view("\n\n\n\n 第三层(顶层)", Some(frame1.id()))?;
61 layer3.set_text_size(&mut activity, 20)?;
62 layer3.view().set_margin(&mut activity, 5)?;
63 layer3.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
64
65 let divider1 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
67 divider1.view().set_margin(&mut activity, 10)?;
68 divider1.view().set_height_wrap_content(&mut activity)?;
69 divider1.view().set_linear_layout_params(&mut activity, 0, None)?;
70
71 let section2 = activity.create_text_view("示例2: 按钮居中叠加", Some(layout.id()))?;
72 section2.set_text_size(&mut activity, 18)?;
73 section2.view().set_margin(&mut activity, 10)?;
74 section2.view().set_height_wrap_content(&mut activity)?;
75 section2.view().set_linear_layout_params(&mut activity, 0, None)?;
76 section2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
77
78 let frame2 = activity.create_frame_layout(Some(layout.id()))?;
80 frame2.view().set_margin(&mut activity, 10)?;
81 frame2.view().set_height(&mut activity, 200)?;
82 frame2.view().set_width_match_parent(&mut activity)?;
83 frame2.view().set_linear_layout_params(&mut activity, 0, None)?;
84
85 let bg_text = activity.create_text_view("这是背景文本\n\n下面有一个居中的按钮\n\n点击试试", Some(frame2.id()))?;
87 bg_text.set_text_size(&mut activity, 16)?;
88 bg_text.view().set_margin(&mut activity, 10)?;
89 bg_text.set_text_color(&mut activity, 0xFF999999u32 as i32)?;
90
91 let center_btn = activity.create_button("点我!", Some(frame2.id()))?;
94 center_btn.view().set_margin(&mut activity, 80)?; let divider2 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
98 divider2.view().set_margin(&mut activity, 10)?;
99 divider2.view().set_height_wrap_content(&mut activity)?;
100 divider2.view().set_linear_layout_params(&mut activity, 0, None)?;
101
102 let info = activity.create_text_view(
103 "💡 FrameLayout 特点:\n\
104 • 子视图按添加顺序层叠\n\
105 • 后添加的视图在上层\n\
106 • 适合创建叠加效果\n\
107 • 可以实现简单的 Z 轴布局",
108 Some(layout.id())
109 )?;
110 info.view().set_margin(&mut activity, 10)?;
111 info.view().set_height_wrap_content(&mut activity)?;
112 info.view().set_linear_layout_params(&mut activity, 0, None)?;
113 info.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
114
115 let status = activity.create_text_view("准备就绪", Some(layout.id()))?;
117 status.view().set_margin(&mut activity, 10)?;
118 status.view().set_height_wrap_content(&mut activity)?;
119 status.view().set_linear_layout_params(&mut activity, 0, None)?;
120 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
121
122 println!("✓ 界面创建完成\n");
123 println!("━━━━━━━━━━━━━━━━━━━━━━");
124 println!("提示:");
125 println!(" • 观察三层文本的层叠效果");
126 println!(" • 点击示例2中的居中按钮");
127 println!(" • FrameLayout 中后添加的元素在上层");
128 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
129
130 let mut click_count = 0;
131
132 loop {
134 let event = read_message(activity.event_stream())?;
135 let event_type = event["type"].as_str().unwrap_or("");
136 let event_value = &event["value"];
137
138 match event_type {
139 "destroy" => {
140 println!("\n✓ Activity 已关闭");
142 return Ok(());
143 },
144 "click" => {
145 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
146
147 if clicked_id == center_btn.id() {
148 click_count += 1;
149 println!("✅ 居中按钮被点击!(第{}次)", click_count);
150
151 let messages = [
152 "✅ 第一次点击!很好!",
153 "👍 第二次点击!继续!",
154 "🎉 第三次点击!太棒了!",
155 "🌟 第四次点击!你很厉害!",
156 "🏆 第五次点击!大师级别!",
157 ];
158
159 let msg = if click_count <= 5 {
160 messages[click_count - 1]
161 } else {
162 "🎊 你已经是专家了!"
163 };
164
165 status.set_text(&mut activity, &format!("{} (点击{}次)", msg, click_count))?;
166
167 let color = match click_count % 5 {
169 1 => 0xFF4CAF50u32 as i32, 2 => 0xFF2196F3u32 as i32, 3 => 0xFFFF9800u32 as i32, 4 => 0xFF9C27B0u32 as i32, _ => 0xFFF44336u32 as i32, };
175 status.set_text_color(&mut activity, color)?;
176 }
177 },
178 _ => {}
179 }
180 }
181}