toggle_demo_v2/
toggle_demo_v2.rs1use termux_gui::{Activity, TextView, Result};
6use termux_gui::connection::read_message;
7
8fn main() -> Result<()> {
9 println!("=== ToggleButton 切换按钮演示 (新库版本) ===\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("🔘 ToggleButton 演示", 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("ToggleButton 是带开关状态的按钮", 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 toggle1 = activity.create_toggle_button_checked("📶 WiFi", Some(layout.id()), false)?;
33 toggle1.view().set_margin(&mut activity, 8)?;
34 toggle1.view().set_height_wrap_content(&mut activity)?;
35 toggle1.view().set_linear_layout_params(&mut activity, 0, None)?;
36
37 let toggle2 = activity.create_toggle_button_checked("📡 蓝牙", Some(layout.id()), true)?;
39 toggle2.view().set_margin(&mut activity, 8)?;
40 toggle2.view().set_height_wrap_content(&mut activity)?;
41 toggle2.view().set_linear_layout_params(&mut activity, 0, None)?;
42
43 let toggle3 = activity.create_toggle_button_checked("🛰️ GPS", Some(layout.id()), false)?;
45 toggle3.view().set_margin(&mut activity, 8)?;
46 toggle3.view().set_height_wrap_content(&mut activity)?;
47 toggle3.view().set_linear_layout_params(&mut activity, 0, None)?;
48
49 let toggle4 = activity.create_toggle_button_checked("✈️ 飞行模式", Some(layout.id()), false)?;
51 toggle4.view().set_margin(&mut activity, 8)?;
52 toggle4.view().set_height_wrap_content(&mut activity)?;
53 toggle4.view().set_linear_layout_params(&mut activity, 0, None)?;
54
55 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
57 divider.view().set_margin(&mut activity, 10)?;
58 divider.view().set_height_wrap_content(&mut activity)?;
59 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
60
61 let status = activity.create_text_view("当前开启: 蓝牙", Some(layout.id()))?;
63 status.view().set_margin(&mut activity, 10)?;
64 status.view().set_height_wrap_content(&mut activity)?;
65 status.view().set_linear_layout_params(&mut activity, 0, None)?;
66 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
67
68 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
70 button_layout.view().set_margin(&mut activity, 10)?;
71 button_layout.view().set_height_wrap_content(&mut activity)?;
72 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
73
74 let all_on_btn = activity.create_button("🔆 全部开启", Some(button_layout.id()))?;
75 all_on_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
76
77 let all_off_btn = activity.create_button("🌙 全部关闭", Some(button_layout.id()))?;
78 all_off_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
79
80 println!("✓ 界面创建完成\n");
81 println!("━━━━━━━━━━━━━━━━━━━━━━");
82 println!("提示:");
83 println!(" • 点击 ToggleButton 切换状态");
84 println!(" • ToggleButton 开启时按钮会凹陷");
85 println!(" • 使用按钮控制全部开关");
86 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
87
88 let mut wifi_on = false;
90 let mut bluetooth_on = true;
91 let mut gps_on = false;
92 let mut airplane_on = false;
93
94 let update_status = |activity: &mut Activity,
96 status: &TextView,
97 wifi: bool,
98 bt: bool,
99 gps: bool,
100 airplane: bool| -> Result<()> {
101 let mut active = Vec::new();
102 if wifi { active.push("WiFi"); }
103 if bt { active.push("蓝牙"); }
104 if gps { active.push("GPS"); }
105 if airplane { active.push("飞行模式"); }
106
107 let text = if active.is_empty() {
108 "当前开启: 无".to_string()
109 } else {
110 format!("当前开启: {}", active.join(", "))
111 };
112
113 status.set_text(activity, &text)?;
114
115 let color = if airplane {
117 0xFFFF9800u32 as i32 } else if active.is_empty() {
119 0xFF9E9E9Eu32 as i32 } else {
121 0xFF2196F3u32 as i32 };
123 status.set_text_color(activity, color)?;
124
125 Ok(())
126 };
127
128 loop {
130 let event = read_message(activity.event_stream())?;
131 let event_type = event["type"].as_str().unwrap_or("");
132 let event_value = &event["value"];
133
134 match event_type {
135 "destroy" => {
136 println!("\n✓ Activity 已关闭");
138 return Ok(());
139 },
140 "click" => {
141 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
142 let is_checked = event_value["set"].as_bool().unwrap_or(false);
143
144 if clicked_id == toggle1.id() {
145 wifi_on = is_checked;
146 println!("📶 WiFi: {}", if is_checked { "开启" } else { "关闭" });
147 } else if clicked_id == toggle2.id() {
148 bluetooth_on = is_checked;
149 println!("📡 蓝牙: {}", if is_checked { "开启" } else { "关闭" });
150 } else if clicked_id == toggle3.id() {
151 gps_on = is_checked;
152 println!("🛰️ GPS: {}", if is_checked { "开启" } else { "关闭" });
153 } else if clicked_id == toggle4.id() {
154 airplane_on = is_checked;
155 println!("✈️ 飞行模式: {}", if is_checked { "开启" } else { "关闭" });
156 } else if clicked_id == all_on_btn.id() {
157 println!("\n🔆 全部开启");
158 wifi_on = true;
159 bluetooth_on = true;
160 gps_on = true;
161 airplane_on = true;
162
163 toggle1.set_checked(&mut activity, true)?;
164 toggle2.set_checked(&mut activity, true)?;
165 toggle3.set_checked(&mut activity, true)?;
166 toggle4.set_checked(&mut activity, true)?;
167 } else if clicked_id == all_off_btn.id() {
168 println!("\n🌙 全部关闭");
169 wifi_on = false;
170 bluetooth_on = false;
171 gps_on = false;
172 airplane_on = false;
173
174 toggle1.set_checked(&mut activity, false)?;
175 toggle2.set_checked(&mut activity, false)?;
176 toggle3.set_checked(&mut activity, false)?;
177 toggle4.set_checked(&mut activity, false)?;
178 }
179
180 update_status(&mut activity, &status, wifi_on, bluetooth_on, gps_on, airplane_on)?;
181 },
182 _ => {}
183 }
184 }
185}