input_demo_v2/
input_demo_v2.rs1use termux_gui::{Activity, Result};
6use termux_gui::connection::read_message;
7
8fn main() -> Result<()> {
9 println!("=== 输入框交互演示 (新库版本) ===\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("文本输入演示 📝", Some(layout.id()))?;
20 title.set_text_size(&mut activity, 28)?;
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 desc1 = activity.create_text_view("在下方输入你的名字:", Some(layout.id()))?;
27 desc1.view().set_margin(&mut activity, 5)?;
28 desc1.view().set_height_wrap_content(&mut activity)?;
29 desc1.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 let name_input = activity.create_edit_text("", Some(layout.id()))?;
33 name_input.set_hint(&mut activity, "请输入姓名")?;
34 name_input.view().set_margin(&mut activity, 5)?;
35 name_input.view().set_height_wrap_content(&mut activity)?;
36 name_input.view().set_linear_layout_params(&mut activity, 0, None)?;
37
38 let desc2 = activity.create_text_view("输入一个数字:", Some(layout.id()))?;
40 desc2.view().set_margin(&mut activity, 5)?;
41 desc2.view().set_height_wrap_content(&mut activity)?;
42 desc2.view().set_linear_layout_params(&mut activity, 0, None)?;
43
44 let number_input = activity.create_edit_text("0", Some(layout.id()))?;
46 number_input.set_hint(&mut activity, "请输入数字")?;
47 number_input.view().set_margin(&mut activity, 5)?;
48 number_input.view().set_height_wrap_content(&mut activity)?;
49 number_input.view().set_linear_layout_params(&mut activity, 0, None)?;
50
51 let desc3 = activity.create_text_view("输入多行消息:", Some(layout.id()))?;
53 desc3.view().set_margin(&mut activity, 5)?;
54 desc3.view().set_height_wrap_content(&mut activity)?;
55 desc3.view().set_linear_layout_params(&mut activity, 0, None)?;
56
57 let message_input = activity.create_edit_text_multiline("", Some(layout.id()))?;
59 message_input.set_hint(&mut activity, "请输入消息(支持多行)")?;
60 message_input.view().set_margin(&mut activity, 5)?;
61 message_input.view().set_linear_layout_params(&mut activity, 1, None)?;
63
64 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
66 button_layout.view().set_margin(&mut activity, 10)?;
67 button_layout.view().set_height_wrap_content(&mut activity)?;
68 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
69
70 let submit_button = activity.create_button("✅ 提交", Some(button_layout.id()))?;
72 submit_button.view().set_linear_layout_params(&mut activity, 1, None)?;
73
74 let clear_button = activity.create_button("🗑️ 清空", Some(button_layout.id()))?;
76 clear_button.view().set_linear_layout_params(&mut activity, 1, None)?;
77
78 let test_button = activity.create_button("🧪 测试", Some(button_layout.id()))?;
80 test_button.view().set_linear_layout_params(&mut activity, 1, None)?;
81
82 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
84 divider.view().set_margin(&mut activity, 10)?;
85 divider.view().set_height_wrap_content(&mut activity)?;
86 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
87
88 let result = activity.create_text_view("结果将显示在这里...", Some(layout.id()))?;
90 result.set_text_size(&mut activity, 16)?;
91 result.view().set_margin(&mut activity, 10)?;
92 result.view().set_linear_layout_params(&mut activity, 1, None)?;
93
94 println!("✓ 界面创建完成\n");
95 println!("━━━━━━━━━━━━━━━━━━━━━━");
96 println!("提示:");
97 println!(" • 在输入框中输入内容");
98 println!(" • 点击 '提交' 查看输入的内容");
99 println!(" • 点击 '清空' 清除所有输入");
100 println!(" • 点击 '测试' 填充测试数据");
101 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
102
103 loop {
105 let event = read_message(activity.event_stream())?;
106 let event_type = event["type"].as_str().unwrap_or("");
107 let event_value = &event["value"];
108
109 match event_type {
110 "destroy" => {
111 println!("\n✓ Activity 已关闭");
114 return Ok(());
115 },
116 "click" => {
117 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
118
119 if clicked_id == submit_button.id() {
120 println!("📨 提交按钮被点击");
121
122 let name = name_input.get_text(&mut activity)?;
124
125 let number_str = number_input.get_text(&mut activity)?;
127 let number: i32 = number_str.parse().unwrap_or(0);
128
129 let message = message_input.get_text(&mut activity)?;
131
132 let result_text = if name.is_empty() {
134 "⚠️ 请输入姓名!".to_string()
135 } else {
136 let doubled = number * 2;
137 let msg_part = if message.is_empty() {
138 String::new()
139 } else {
140 format!("\n\n消息:\n{}", message)
141 };
142
143 format!(
144 "✅ 提交成功!\n\n\
145 姓名: {}\n\
146 数字: {} (x2 = {}){}",
147 name, number, doubled, msg_part
148 )
149 };
150
151 result.set_text(&mut activity, &result_text)?;
153
154 let color = if name.is_empty() {
156 0xFFF44336u32 as i32 } else {
158 0xFF4CAF50u32 as i32 };
160 result.set_text_color(&mut activity, color)?;
161
162 println!(" 姓名: {}", name);
163 println!(" 数字: {}", number);
164 println!(" 消息: {}", if message.is_empty() { "(空)" } else { &message });
165
166 } else if clicked_id == clear_button.id() {
167 println!("🗑️ 清空按钮被点击");
168
169 name_input.set_text(&mut activity, "")?;
171 number_input.set_text(&mut activity, "0")?;
172 message_input.set_text(&mut activity, "")?;
173
174 result.set_text(&mut activity, "已清空所有输入")?;
176 result.set_text_color(&mut activity, 0xFF9E9E9Eu32 as i32)?;
177
178 } else if clicked_id == test_button.id() {
179 println!("🧪 测试按钮被点击");
180
181 name_input.set_text(&mut activity, "张三")?;
183 number_input.set_text(&mut activity, "42")?;
184 message_input.set_text(&mut activity, "这是一条测试消息。\n使用Rust编写的Termux:GUI应用!")?;
185
186 result.set_text(&mut activity, "✅ 已填充测试数据\n点击 '提交' 按钮查看结果")?;
187 result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
188 }
189 },
190 "text" => {
191 let view_id = event_value["id"].as_i64().unwrap_or(-1);
193 let text = event_value["text"].as_str().unwrap_or("");
194
195 if view_id == name_input.id() {
196 println!("📝 姓名输入框内容变化: {}", text);
197 } else if view_id == number_input.id() {
198 println!("🔢 数字输入框内容变化: {}", text);
199 }
200 },
201 _ => {}
202 }
203 }
204}