pub struct Button { /* private fields */ }Expand description
A Button that can be clicked
Implementations§
Source§impl Button
impl Button
Sourcepub fn new(
activity: &mut Activity,
text: &str,
parent: Option<i64>,
) -> Result<Self>
pub fn new( activity: &mut Activity, text: &str, parent: Option<i64>, ) -> Result<Self>
Create a new Button
Sourcepub fn id(&self) -> i64
pub fn id(&self) -> i64
Get the view ID
Examples found in repository?
examples/button_demo_v2.rs (line 55)
8fn main() -> Result<()> {
9 println!("=== Button 交互演示 (新库版本) ===\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("计数器演示 🦀", Some(layout.id()))?;
20 title.set_text_size(&mut activity, 30)?;
21 title.view().set_margin(&mut activity, 10)?;
22 // 设置标题高度为WRAP_CONTENT,避免占用太多空间
23 title.view().set_height_wrap_content(&mut activity)?;
24 // 设置布局权重为0,不占用额外空间
25 title.view().set_linear_layout_params(&mut activity, 0, None)?;
26
27 // 创建计数显示
28 let counter = activity.create_text_view("点击次数: 0", Some(layout.id()))?;
29 counter.set_text_size(&mut activity, 24)?;
30 counter.view().set_margin(&mut activity, 20)?;
31 // 设置计数器高度为WRAP_CONTENT
32 counter.view().set_height_wrap_content(&mut activity)?;
33 // 给计数器更高的权重,让它获得更多空间
34 counter.view().set_linear_layout_params(&mut activity, 1, None)?;
35
36 // 创建按钮布局(横向)
37 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
38 // 按钮布局也使用WRAP_CONTENT
39 button_layout.view().set_height_wrap_content(&mut activity)?;
40 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
41
42 // 创建按钮
43 let inc_button = activity.create_button("➕ 增加", Some(button_layout.id()))?;
44 inc_button.view().set_linear_layout_params(&mut activity, 1, None)?; // 均分空间
45
46 let dec_button = activity.create_button("➖ 减少", Some(button_layout.id()))?;
47 dec_button.view().set_linear_layout_params(&mut activity, 1, None)?; // 均分空间
48
49 let reset_button = activity.create_button("🔄 重置", Some(layout.id()))?;
50 reset_button.view().set_height_wrap_content(&mut activity)?;
51 reset_button.view().set_linear_layout_params(&mut activity, 0, None)?;
52
53 println!("✓ 界面创建完成");
54 println!(" - Counter ID: {}", counter.id());
55 println!(" - Button ID: {}", inc_button.id());
56 println!("━━━━━━━━━━━━━━━━━━━━━━");
57 println!("提示: 点击按钮进行交互");
58 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
59
60 // 事件循环
61 let mut count = 0;
62
63 loop {
64 let event = read_message(activity.event_stream())?;
65 let event_type = event["type"].as_str().unwrap_or("");
66
67 match event_type {
68 "destroy" => {
69 // Activity 已被系统销毁,直接退出即可
70 // 不要调用 activity.finish(),因为 Activity 已经不存在了
71 println!("\n✓ Activity 已关闭");
72 println!("✓ 程序结束");
73 return Ok(());
74 },
75 "click" => {
76 let id = event["value"]["id"].as_i64().unwrap_or(-1);
77
78 if id == inc_button.id() {
79 count += 1;
80 println!("➕ count = {}", count);
81 } else if id == dec_button.id() {
82 count -= 1;
83 println!("➖ count = {}", count);
84 } else if id == reset_button.id() {
85 count = 0;
86 println!("🔄 count = {}", count);
87 }
88
89 // 更新文本
90 counter.set_text(&mut activity, &format!("点击次数: {}", count))?;
91
92 // 根据计数改变颜色
93 let color = if count > 0 {
94 0xFF4CAF50u32 as i32 // 绿色
95 } else if count < 0 {
96 0xFFF44336u32 as i32 // 红色
97 } else {
98 0xFF2196F3u32 as i32 // 蓝色
99 };
100 counter.set_text_color(&mut activity, color)?;
101 },
102 _ => {}
103 }
104 }
105}More examples
examples/image_demo_v2.rs (line 103)
8fn main() -> Result<()> {
9 println!("=== ImageView 图像显示演示 (新库版本) ===\n");
10
11 // 创建 Activity(全屏模式)
12 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 // 创建 NestedScrollView 作为根布局(支持滚动)
16 let scroll = activity.create_nested_scroll_view(None)?;
17
18 // 创建主布局(放在 ScrollView 内)
19 let layout = activity.create_linear_layout(Some(scroll.id()))?;
20 layout.view().set_margin(&mut activity, 15)?;
21
22 // 创建标题
23 let title = activity.create_text_view("🖼️ 图片显示测试", Some(layout.id()))?;
24 title.set_text_size(&mut activity, 26)?;
25 title.view().set_margin(&mut activity, 10)?;
26 title.view().set_height_wrap_content(&mut activity)?;
27 title.view().set_linear_layout_params(&mut activity, 0, None)?;
28
29 // 创建说明
30 let desc = activity.create_text_view("显示一个小的测试图片", Some(layout.id()))?;
31 desc.view().set_margin(&mut activity, 5)?;
32 desc.view().set_height_wrap_content(&mut activity)?;
33 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
34
35 // 创建 ImageView
36 let image_view = activity.create_image_view(Some(layout.id()))?;
37 image_view.view().set_margin(&mut activity, 10)?;
38 // ImageView 使用权重占据主要空间
39 image_view.view().set_linear_layout_params(&mut activity, 1, None)?;
40
41 // 创建一个简单的 1x1 红色像素 PNG 图片(base64编码)
42 // 这是一个最小的有效PNG文件
43 let red_pixel_png_base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
44
45 // 设置图片
46 image_view.set_image(&mut activity, red_pixel_png_base64)?;
47
48 // 创建状态显示
49 let status = activity.create_text_view("✅ 图片已加载", Some(layout.id()))?;
50 status.view().set_margin(&mut activity, 10)?;
51 status.view().set_height_wrap_content(&mut activity)?;
52 status.view().set_linear_layout_params(&mut activity, 0, None)?;
53 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
54
55 // 创建按钮布局
56 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
57 button_layout.view().set_margin(&mut activity, 10)?;
58 button_layout.view().set_height_wrap_content(&mut activity)?;
59 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
60
61 // 红色图片按钮
62 let red_btn = activity.create_button("🔴 红色", Some(button_layout.id()))?;
63 red_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
64
65 // 绿色图片按钮
66 let green_btn = activity.create_button("🟢 绿色", Some(button_layout.id()))?;
67 green_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
68
69 // 蓝色图片按钮
70 let blue_btn = activity.create_button("🔵 蓝色", Some(button_layout.id()))?;
71 blue_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
72
73 println!("✓ 界面创建完成\n");
74 println!("━━━━━━━━━━━━━━━━━━━━━━");
75 println!("提示:");
76 println!(" • 点击按钮切换不同颜色的图片");
77 println!(" • 图片会自动缩放填充区域");
78 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
79
80 // 预定义几个不同颜色的1x1像素PNG图片(base64)
81 // 红色像素
82 let red_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
83 // 绿色像素
84 let green_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==";
85 // 蓝色像素
86 let blue_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg==";
87
88 // 事件循环
89 loop {
90 let event = read_message(activity.event_stream())?;
91 let event_type = event["type"].as_str().unwrap_or("");
92 let event_value = &event["value"];
93
94 match event_type {
95 "destroy" => {
96 // Activity 已被系统销毁,直接退出即可
97 println!("\n✓ Activity 已关闭");
98 return Ok(());
99 },
100 "click" => {
101 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
102
103 if clicked_id == red_btn.id() {
104 println!("🔴 切换到红色图片");
105 image_view.set_image(&mut activity, red_png)?;
106 status.set_text(&mut activity, "🔴 红色图片")?;
107 status.set_text_color(&mut activity, 0xFFF44336u32 as i32)?;
108 } else if clicked_id == green_btn.id() {
109 println!("🟢 切换到绿色图片");
110 image_view.set_image(&mut activity, green_png)?;
111 status.set_text(&mut activity, "🟢 绿色图片")?;
112 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
113 } else if clicked_id == blue_btn.id() {
114 println!("🔵 切换到蓝色图片");
115 image_view.set_image(&mut activity, blue_png)?;
116 status.set_text(&mut activity, "🔵 蓝色图片")?;
117 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
118 }
119 },
120 _ => {}
121 }
122 }
123}examples/checkbox_demo_v2.rs (line 143)
33fn main() -> Result<()> {
34 println!("=== Checkbox 复选框演示 (新库版本) ===\n");
35
36 // 创建 Activity(对话框模式)
37 let mut activity = Activity::new(true)?;
38 println!("✓ 连接建立\n");
39
40 // 创建主布局
41 let layout = activity.create_linear_layout(None)?;
42
43 // 创建标题
44 let title = activity.create_text_view("选择你喜欢的功能 ✅", Some(layout.id()))?;
45 title.set_text_size(&mut activity, 26)?;
46 title.view().set_margin(&mut activity, 10)?;
47 title.view().set_height_wrap_content(&mut activity)?;
48
49 // 创建 Checkbox 1 - WiFi (初始未选中)
50 let checkbox1 = activity.create_checkbox_checked("📶 WiFi", Some(layout.id()), false)?;
51 checkbox1.view().set_margin(&mut activity, 5)?;
52 checkbox1.view().set_height_wrap_content(&mut activity)?;
53
54 // 创建 Checkbox 2 - 蓝牙 (初始选中)
55 let checkbox2 = activity.create_checkbox_checked("📡 蓝牙", Some(layout.id()), true)?;
56 checkbox2.view().set_margin(&mut activity, 5)?;
57 checkbox2.view().set_height_wrap_content(&mut activity)?;
58
59 // 创建 Checkbox 3 - 定位 (初始未选中)
60 let checkbox3 = activity.create_checkbox_checked("📍 定位服务", Some(layout.id()), false)?;
61 checkbox3.view().set_margin(&mut activity, 5)?;
62 checkbox3.view().set_height_wrap_content(&mut activity)?;
63
64 // 创建 Checkbox 4 - 通知 (初始选中)
65 let checkbox4 = activity.create_checkbox_checked("🔔 通知", Some(layout.id()), true)?;
66 checkbox4.view().set_margin(&mut activity, 5)?;
67 checkbox4.view().set_height_wrap_content(&mut activity)?;
68
69 // 创建分隔线
70 let separator = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
71 separator.view().set_height_wrap_content(&mut activity)?;
72
73 // 创建状态显示
74 let status = activity.create_text_view("当前选中: 蓝牙, 通知", Some(layout.id()))?;
75 status.view().set_margin(&mut activity, 10)?;
76 status.view().set_height_wrap_content(&mut activity)?;
77 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
78
79 // 创建按钮
80 let apply_button = activity.create_button("✅ 应用设置", Some(layout.id()))?;
81 apply_button.view().set_margin(&mut activity, 10)?;
82 apply_button.view().set_height_wrap_content(&mut activity)?;
83
84 println!("✓ 界面创建完成\n");
85 println!("━━━━━━━━━━━━━━━━━━━━━━");
86 println!("提示:");
87 println!(" • 点击复选框切换状态");
88 println!(" • 观察状态实时更新");
89 println!(" • 点击 '应用设置' 查看最终选择");
90 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
91
92 // 状态跟踪
93 let mut wifi_checked = false;
94 let mut bluetooth_checked = true;
95 let mut location_checked = false;
96 let mut notification_checked = true;
97
98 // 事件循环
99 loop {
100 let event = read_message(activity.event_stream())?;
101 let event_type = event["type"].as_str().unwrap_or("");
102 let event_value = &event["value"];
103
104 match event_type {
105 "destroy" => {
106 // Activity 已被系统销毁,直接退出即可
107 // 不要调用 activity.finish(),因为 Activity 已经不存在了
108 println!("\n✓ Activity 已关闭");
109 return Ok(());
110 },
111 "click" => {
112 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
113 let is_checked = event_value["set"].as_bool().unwrap_or(false);
114
115 if clicked_id == checkbox1.id() {
116 wifi_checked = is_checked;
117 println!("📶 WiFi: {}", if is_checked { "开启" } else { "关闭" });
118 update_status_text(&mut activity, &status,
119 wifi_checked, bluetooth_checked,
120 location_checked, notification_checked)?;
121
122 } else if clicked_id == checkbox2.id() {
123 bluetooth_checked = is_checked;
124 println!("📡 蓝牙: {}", if is_checked { "开启" } else { "关闭" });
125 update_status_text(&mut activity, &status,
126 wifi_checked, bluetooth_checked,
127 location_checked, notification_checked)?;
128
129 } else if clicked_id == checkbox3.id() {
130 location_checked = is_checked;
131 println!("📍 定位: {}", if is_checked { "开启" } else { "关闭" });
132 update_status_text(&mut activity, &status,
133 wifi_checked, bluetooth_checked,
134 location_checked, notification_checked)?;
135
136 } else if clicked_id == checkbox4.id() {
137 notification_checked = is_checked;
138 println!("🔔 通知: {}", if is_checked { "开启" } else { "关闭" });
139 update_status_text(&mut activity, &status,
140 wifi_checked, bluetooth_checked,
141 location_checked, notification_checked)?;
142
143 } else if clicked_id == apply_button.id() {
144 println!("\n✅ 应用设置:");
145 println!(" WiFi: {}", if wifi_checked { "✓" } else { "✗" });
146 println!(" 蓝牙: {}", if bluetooth_checked { "✓" } else { "✗" });
147 println!(" 定位: {}", if location_checked { "✓" } else { "✗" });
148 println!(" 通知: {}", if notification_checked { "✓" } else { "✗" });
149
150 // 显示确认消息
151 status.set_text(&mut activity, "✅ 设置已应用!")?;
152 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
153 }
154 },
155 _ => {}
156 }
157 }
158}examples/horizontal_scroll_demo_v2.rs (line 137)
8fn main() -> Result<()> {
9 println!("=== HorizontalScrollView 水平滚动演示 (新库版本) ===\n");
10
11 // 创建 Activity(全屏模式)
12 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 // 创建主垂直布局
16 let main_layout = activity.create_linear_layout(None)?;
17 main_layout.view().set_margin(&mut activity, 15)?;
18
19 // 创建标题
20 let title = activity.create_text_view("↔️ HorizontalScrollView 演示", Some(main_layout.id()))?;
21 title.set_text_size(&mut activity, 26)?;
22 title.view().set_margin(&mut activity, 10)?;
23 title.view().set_height_wrap_content(&mut activity)?;
24 title.view().set_linear_layout_params(&mut activity, 0, None)?;
25
26 // 创建说明
27 let desc = activity.create_text_view("左右滑动查看更多按钮", Some(main_layout.id()))?;
28 desc.view().set_margin(&mut activity, 5)?;
29 desc.view().set_height_wrap_content(&mut activity)?;
30 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
31
32 // ========== 第一行: 水果按钮 ==========
33 let section1 = activity.create_text_view("第一行: 水果按钮(左右滑动)", Some(main_layout.id()))?;
34 section1.set_text_size(&mut activity, 18)?;
35 section1.view().set_margin(&mut activity, 10)?;
36 section1.view().set_height_wrap_content(&mut activity)?;
37 section1.view().set_linear_layout_params(&mut activity, 0, None)?;
38 section1.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
39
40 // 创建第一个 HorizontalScrollView
41 let h_scroll1 = activity.create_horizontal_scroll_view(Some(main_layout.id()))?;
42 h_scroll1.view().set_margin(&mut activity, 10)?;
43 h_scroll1.view().set_height_wrap_content(&mut activity)?;
44 h_scroll1.view().set_linear_layout_params(&mut activity, 0, None)?;
45
46 // 在 HorizontalScrollView 内创建水平 LinearLayout
47 let h_layout1 = activity.create_linear_layout_horizontal(Some(h_scroll1.id()))?;
48 h_layout1.view().set_height_wrap_content(&mut activity)?;
49
50 // 添加10个水果按钮
51 let fruits = ["🍎 苹果", "🍊 橙子", "🍌 香蕉", "🍇 葡萄", "🍓 草莓",
52 "🍑 桃子", "🍒 樱桃", "🍍 菠萝", "🥝 猕猴桃", "🥭 芒果"];
53 let mut fruit_buttons = Vec::new();
54 for fruit in &fruits {
55 let btn = activity.create_button(fruit, Some(h_layout1.id()))?;
56 btn.view().set_width(&mut activity, 180)?; // 固定宽度180dp
57 btn.view().set_margin(&mut activity, 5)?;
58 fruit_buttons.push(btn);
59 }
60
61 // ========== 第二行: 数字按钮 ==========
62 let section2 = activity.create_text_view("第二行: 数字按钮(左右滑动)", Some(main_layout.id()))?;
63 section2.set_text_size(&mut activity, 18)?;
64 section2.view().set_margin(&mut activity, 10)?;
65 section2.view().set_height_wrap_content(&mut activity)?;
66 section2.view().set_linear_layout_params(&mut activity, 0, None)?;
67 section2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
68
69 // 创建第二个 HorizontalScrollView
70 let h_scroll2 = activity.create_horizontal_scroll_view(Some(main_layout.id()))?;
71 h_scroll2.view().set_margin(&mut activity, 10)?;
72 h_scroll2.view().set_height_wrap_content(&mut activity)?;
73 h_scroll2.view().set_linear_layout_params(&mut activity, 0, None)?;
74
75 // 在 HorizontalScrollView 内创建水平 LinearLayout
76 let h_layout2 = activity.create_linear_layout_horizontal(Some(h_scroll2.id()))?;
77 h_layout2.view().set_height_wrap_content(&mut activity)?;
78
79 // 添加20个数字按钮
80 let mut number_buttons = Vec::new();
81 for i in 0..20 {
82 let btn = activity.create_button(&format!("数字 {}", i * 5), Some(h_layout2.id()))?;
83 btn.view().set_width(&mut activity, 150)?; // 固定宽度150dp
84 btn.view().set_margin(&mut activity, 5)?;
85 number_buttons.push(btn);
86 }
87
88 // ========== 底部信息 ==========
89 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(main_layout.id()))?;
90 divider.view().set_margin(&mut activity, 10)?;
91 divider.view().set_height_wrap_content(&mut activity)?;
92 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
93
94 let info = activity.create_text_view(
95 "💡 提示:\n\
96 • 在每一行中左右滑动\n\
97 • 点击任意按钮查看效果\n\
98 • HorizontalScrollView 支持水平滚动",
99 Some(main_layout.id())
100 )?;
101 info.view().set_margin(&mut activity, 10)?;
102 info.view().set_height_wrap_content(&mut activity)?;
103 info.view().set_linear_layout_params(&mut activity, 0, None)?;
104 info.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
105
106 // 状态显示
107 let status = activity.create_text_view("准备就绪 - 尝试左右滑动", Some(main_layout.id()))?;
108 status.view().set_margin(&mut activity, 10)?;
109 status.view().set_height_wrap_content(&mut activity)?;
110 status.view().set_linear_layout_params(&mut activity, 0, None)?;
111 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
112
113 println!("✓ 界面创建完成\n");
114 println!("━━━━━━━━━━━━━━━━━━━━━━");
115 println!("提示:");
116 println!(" • 第一行: 10个水果按钮");
117 println!(" • 第二行: 20个数字按钮");
118 println!(" • 左右滑动查看更多内容");
119 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
120
121 // 事件循环
122 loop {
123 let event = read_message(activity.event_stream())?;
124 let event_type = event["type"].as_str().unwrap_or("");
125 let event_value = &event["value"];
126
127 match event_type {
128 "destroy" => {
129 println!("\n✓ Activity 已关闭");
130 return Ok(());
131 },
132 "click" => {
133 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
134
135 // 检查水果按钮
136 for (i, btn) in fruit_buttons.iter().enumerate() {
137 if clicked_id == btn.id() {
138 println!("✅ 选择: {}", fruits[i]);
139 status.set_text(&mut activity, &format!("✅ 选择: {}", fruits[i]))?;
140 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
141 break;
142 }
143 }
144
145 // 检查数字按钮
146 for (i, btn) in number_buttons.iter().enumerate() {
147 if clicked_id == btn.id() {
148 let value = i * 5;
149 println!("🔢 选择数字: {}", value);
150 status.set_text(&mut activity, &format!("🔢 选择数字: {}", value))?;
151 status.set_text_color(&mut activity, 0xFFFF9800u32 as i32)?;
152 break;
153 }
154 }
155 },
156 _ => {}
157 }
158 }
159}examples/switch_demo_v2.rs (line 176)
48fn main() -> Result<()> {
49 println!("=== Switch 开关演示 (新库版本) ===\n");
50
51 // 创建 Activity(对话框模式)
52 let mut activity = Activity::new(true)?;
53 println!("✓ 连接建立\n");
54
55 // 创建主布局
56 let layout = activity.create_linear_layout(None)?;
57
58 // 创建标题
59 let title = activity.create_text_view("智能家居控制 🏠", Some(layout.id()))?;
60 title.set_text_size(&mut activity, 28)?;
61 title.view().set_margin(&mut activity, 10)?;
62 title.view().set_height_wrap_content(&mut activity)?;
63 title.view().set_linear_layout_params(&mut activity, 0, None)?;
64
65 // 创建说明
66 let desc = activity.create_text_view("滑动开关控制设备", Some(layout.id()))?;
67 desc.view().set_margin(&mut activity, 5)?;
68 desc.view().set_height_wrap_content(&mut activity)?;
69 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
70
71 // 创建 Switch 1 - 客厅灯(初始开启)
72 let switch1 = activity.create_switch_checked("💡 客厅灯", Some(layout.id()), true)?;
73 switch1.view().set_margin(&mut activity, 8)?;
74 switch1.view().set_height_wrap_content(&mut activity)?;
75 switch1.view().set_linear_layout_params(&mut activity, 0, None)?;
76
77 // 创建 Switch 2 - 空调(初始关闭)
78 let switch2 = activity.create_switch_checked("❄️ 空调", Some(layout.id()), false)?;
79 switch2.view().set_margin(&mut activity, 8)?;
80 switch2.view().set_height_wrap_content(&mut activity)?;
81 switch2.view().set_linear_layout_params(&mut activity, 0, None)?;
82
83 // 创建 Switch 3 - 加湿器(初始关闭)
84 let switch3 = activity.create_switch_checked("💧 加湿器", Some(layout.id()), false)?;
85 switch3.view().set_margin(&mut activity, 8)?;
86 switch3.view().set_height_wrap_content(&mut activity)?;
87 switch3.view().set_linear_layout_params(&mut activity, 0, None)?;
88
89 // 创建 Switch 4 - 窗帘(初始开启)
90 let switch4 = activity.create_switch_checked("🪟 电动窗帘", Some(layout.id()), true)?;
91 switch4.view().set_margin(&mut activity, 8)?;
92 switch4.view().set_height_wrap_content(&mut activity)?;
93 switch4.view().set_linear_layout_params(&mut activity, 0, None)?;
94
95 // 创建 Switch 5 - 音乐(初始关闭)
96 let switch5 = activity.create_switch_checked("🎵 背景音乐", Some(layout.id()), false)?;
97 switch5.view().set_margin(&mut activity, 8)?;
98 switch5.view().set_height_wrap_content(&mut activity)?;
99 switch5.view().set_linear_layout_params(&mut activity, 0, None)?;
100
101 // 创建分隔线
102 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
103 divider.view().set_margin(&mut activity, 10)?;
104 divider.view().set_height_wrap_content(&mut activity)?;
105 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
106
107 // 创建状态显示
108 let status = activity.create_text_view("已开启: 客厅灯, 窗帘", Some(layout.id()))?;
109 status.set_text_size(&mut activity, 16)?;
110 status.view().set_margin(&mut activity, 10)?;
111 status.view().set_height_wrap_content(&mut activity)?;
112 status.view().set_linear_layout_params(&mut activity, 0, None)?;
113 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
114
115 // 创建按钮布局(水平)
116 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
117 button_layout.view().set_margin(&mut activity, 10)?;
118 button_layout.view().set_height_wrap_content(&mut activity)?;
119 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
120
121 // 创建全部开启按钮
122 let all_on_btn = activity.create_button("🔆 全部开启", Some(button_layout.id()))?;
123 all_on_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
124
125 // 创建全部关闭按钮
126 let all_off_btn = activity.create_button("🌙 全部关闭", Some(button_layout.id()))?;
127 all_off_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
128
129 println!("✓ 界面创建完成\n");
130 println!("━━━━━━━━━━━━━━━━━━━━━━");
131 println!("提示:");
132 println!(" • 滑动开关切换设备状态");
133 println!(" • 观察状态实时更新");
134 println!(" • 使用 '全部开启/关闭' 按钮");
135 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
136
137 // 状态跟踪
138 let mut light_on = true;
139 let mut ac_on = false;
140 let mut humidifier_on = false;
141 let mut curtain_on = true;
142 let mut music_on = false;
143
144 // 事件循环
145 loop {
146 let event = read_message(activity.event_stream())?;
147 let event_type = event["type"].as_str().unwrap_or("");
148 let event_value = &event["value"];
149
150 match event_type {
151 "destroy" => {
152 // Activity 已被系统销毁,直接退出即可
153 // 不要调用 activity.finish(),因为 Activity 已经不存在了
154 println!("\n✓ Activity 已关闭");
155 return Ok(());
156 },
157 "click" => {
158 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
159 let is_checked = event_value["set"].as_bool().unwrap_or(false);
160
161 if clicked_id == switch1.id() {
162 light_on = is_checked;
163 println!("💡 客厅灯: {}", if is_checked { "开启" } else { "关闭" });
164 } else if clicked_id == switch2.id() {
165 ac_on = is_checked;
166 println!("❄️ 空调: {}", if is_checked { "开启" } else { "关闭" });
167 } else if clicked_id == switch3.id() {
168 humidifier_on = is_checked;
169 println!("💧 加湿器: {}", if is_checked { "开启" } else { "关闭" });
170 } else if clicked_id == switch4.id() {
171 curtain_on = is_checked;
172 println!("🪟 窗帘: {}", if is_checked { "打开" } else { "关闭" });
173 } else if clicked_id == switch5.id() {
174 music_on = is_checked;
175 println!("🎵 音乐: {}", if is_checked { "播放" } else { "停止" });
176 } else if clicked_id == all_on_btn.id() {
177 println!("\n🔆 全部开启");
178 light_on = true;
179 ac_on = true;
180 humidifier_on = true;
181 curtain_on = true;
182 music_on = true;
183
184 switch1.set_checked(&mut activity, true)?;
185 switch2.set_checked(&mut activity, true)?;
186 switch3.set_checked(&mut activity, true)?;
187 switch4.set_checked(&mut activity, true)?;
188 switch5.set_checked(&mut activity, true)?;
189 } else if clicked_id == all_off_btn.id() {
190 println!("\n🌙 全部关闭");
191 light_on = false;
192 ac_on = false;
193 humidifier_on = false;
194 curtain_on = false;
195 music_on = false;
196
197 switch1.set_checked(&mut activity, false)?;
198 switch2.set_checked(&mut activity, false)?;
199 switch3.set_checked(&mut activity, false)?;
200 switch4.set_checked(&mut activity, false)?;
201 switch5.set_checked(&mut activity, false)?;
202 }
203
204 update_status(&mut activity, &status,
205 light_on, ac_on, humidifier_on, curtain_on, music_on)?;
206 },
207 _ => {}
208 }
209 }
210}examples/toggle_demo_v2.rs (line 156)
8fn main() -> Result<()> {
9 println!("=== ToggleButton 切换按钮演示 (新库版本) ===\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("🔘 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 // 创建说明
26 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 // 创建 ToggleButton 1 - WiFi(关闭)
32 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 // 创建 ToggleButton 2 - 蓝牙(开启)
38 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 // 创建 ToggleButton 3 - GPS(关闭)
44 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 // 创建 ToggleButton 4 - 飞行模式(关闭)
50 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 // 创建分隔线
56 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 // 创建状态显示
62 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 // 创建按钮布局
69 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 // 状态跟踪
89 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 // 更新状态显示的辅助函数
95 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 // 如果开启飞行模式,文字显示橙色警告
116 let color = if airplane {
117 0xFFFF9800u32 as i32 // 橙色
118 } else if active.is_empty() {
119 0xFF9E9E9Eu32 as i32 // 灰色
120 } else {
121 0xFF2196F3u32 as i32 // 蓝色
122 };
123 status.set_text_color(activity, color)?;
124
125 Ok(())
126 };
127
128 // 事件循环
129 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 // Activity 已被系统销毁,直接退出即可
137 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}Sourcepub fn view(&self) -> &View
pub fn view(&self) -> &View
Get the underlying View
Examples found in repository?
examples/button_demo_v2.rs (line 44)
8fn main() -> Result<()> {
9 println!("=== Button 交互演示 (新库版本) ===\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("计数器演示 🦀", Some(layout.id()))?;
20 title.set_text_size(&mut activity, 30)?;
21 title.view().set_margin(&mut activity, 10)?;
22 // 设置标题高度为WRAP_CONTENT,避免占用太多空间
23 title.view().set_height_wrap_content(&mut activity)?;
24 // 设置布局权重为0,不占用额外空间
25 title.view().set_linear_layout_params(&mut activity, 0, None)?;
26
27 // 创建计数显示
28 let counter = activity.create_text_view("点击次数: 0", Some(layout.id()))?;
29 counter.set_text_size(&mut activity, 24)?;
30 counter.view().set_margin(&mut activity, 20)?;
31 // 设置计数器高度为WRAP_CONTENT
32 counter.view().set_height_wrap_content(&mut activity)?;
33 // 给计数器更高的权重,让它获得更多空间
34 counter.view().set_linear_layout_params(&mut activity, 1, None)?;
35
36 // 创建按钮布局(横向)
37 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
38 // 按钮布局也使用WRAP_CONTENT
39 button_layout.view().set_height_wrap_content(&mut activity)?;
40 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
41
42 // 创建按钮
43 let inc_button = activity.create_button("➕ 增加", Some(button_layout.id()))?;
44 inc_button.view().set_linear_layout_params(&mut activity, 1, None)?; // 均分空间
45
46 let dec_button = activity.create_button("➖ 减少", Some(button_layout.id()))?;
47 dec_button.view().set_linear_layout_params(&mut activity, 1, None)?; // 均分空间
48
49 let reset_button = activity.create_button("🔄 重置", Some(layout.id()))?;
50 reset_button.view().set_height_wrap_content(&mut activity)?;
51 reset_button.view().set_linear_layout_params(&mut activity, 0, None)?;
52
53 println!("✓ 界面创建完成");
54 println!(" - Counter ID: {}", counter.id());
55 println!(" - Button ID: {}", inc_button.id());
56 println!("━━━━━━━━━━━━━━━━━━━━━━");
57 println!("提示: 点击按钮进行交互");
58 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
59
60 // 事件循环
61 let mut count = 0;
62
63 loop {
64 let event = read_message(activity.event_stream())?;
65 let event_type = event["type"].as_str().unwrap_or("");
66
67 match event_type {
68 "destroy" => {
69 // Activity 已被系统销毁,直接退出即可
70 // 不要调用 activity.finish(),因为 Activity 已经不存在了
71 println!("\n✓ Activity 已关闭");
72 println!("✓ 程序结束");
73 return Ok(());
74 },
75 "click" => {
76 let id = event["value"]["id"].as_i64().unwrap_or(-1);
77
78 if id == inc_button.id() {
79 count += 1;
80 println!("➕ count = {}", count);
81 } else if id == dec_button.id() {
82 count -= 1;
83 println!("➖ count = {}", count);
84 } else if id == reset_button.id() {
85 count = 0;
86 println!("🔄 count = {}", count);
87 }
88
89 // 更新文本
90 counter.set_text(&mut activity, &format!("点击次数: {}", count))?;
91
92 // 根据计数改变颜色
93 let color = if count > 0 {
94 0xFF4CAF50u32 as i32 // 绿色
95 } else if count < 0 {
96 0xFFF44336u32 as i32 // 红色
97 } else {
98 0xFF2196F3u32 as i32 // 蓝色
99 };
100 counter.set_text_color(&mut activity, color)?;
101 },
102 _ => {}
103 }
104 }
105}More examples
examples/image_demo_v2.rs (line 63)
8fn main() -> Result<()> {
9 println!("=== ImageView 图像显示演示 (新库版本) ===\n");
10
11 // 创建 Activity(全屏模式)
12 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 // 创建 NestedScrollView 作为根布局(支持滚动)
16 let scroll = activity.create_nested_scroll_view(None)?;
17
18 // 创建主布局(放在 ScrollView 内)
19 let layout = activity.create_linear_layout(Some(scroll.id()))?;
20 layout.view().set_margin(&mut activity, 15)?;
21
22 // 创建标题
23 let title = activity.create_text_view("🖼️ 图片显示测试", Some(layout.id()))?;
24 title.set_text_size(&mut activity, 26)?;
25 title.view().set_margin(&mut activity, 10)?;
26 title.view().set_height_wrap_content(&mut activity)?;
27 title.view().set_linear_layout_params(&mut activity, 0, None)?;
28
29 // 创建说明
30 let desc = activity.create_text_view("显示一个小的测试图片", Some(layout.id()))?;
31 desc.view().set_margin(&mut activity, 5)?;
32 desc.view().set_height_wrap_content(&mut activity)?;
33 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
34
35 // 创建 ImageView
36 let image_view = activity.create_image_view(Some(layout.id()))?;
37 image_view.view().set_margin(&mut activity, 10)?;
38 // ImageView 使用权重占据主要空间
39 image_view.view().set_linear_layout_params(&mut activity, 1, None)?;
40
41 // 创建一个简单的 1x1 红色像素 PNG 图片(base64编码)
42 // 这是一个最小的有效PNG文件
43 let red_pixel_png_base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
44
45 // 设置图片
46 image_view.set_image(&mut activity, red_pixel_png_base64)?;
47
48 // 创建状态显示
49 let status = activity.create_text_view("✅ 图片已加载", Some(layout.id()))?;
50 status.view().set_margin(&mut activity, 10)?;
51 status.view().set_height_wrap_content(&mut activity)?;
52 status.view().set_linear_layout_params(&mut activity, 0, None)?;
53 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
54
55 // 创建按钮布局
56 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
57 button_layout.view().set_margin(&mut activity, 10)?;
58 button_layout.view().set_height_wrap_content(&mut activity)?;
59 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
60
61 // 红色图片按钮
62 let red_btn = activity.create_button("🔴 红色", Some(button_layout.id()))?;
63 red_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
64
65 // 绿色图片按钮
66 let green_btn = activity.create_button("🟢 绿色", Some(button_layout.id()))?;
67 green_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
68
69 // 蓝色图片按钮
70 let blue_btn = activity.create_button("🔵 蓝色", Some(button_layout.id()))?;
71 blue_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
72
73 println!("✓ 界面创建完成\n");
74 println!("━━━━━━━━━━━━━━━━━━━━━━");
75 println!("提示:");
76 println!(" • 点击按钮切换不同颜色的图片");
77 println!(" • 图片会自动缩放填充区域");
78 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
79
80 // 预定义几个不同颜色的1x1像素PNG图片(base64)
81 // 红色像素
82 let red_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";
83 // 绿色像素
84 let green_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==";
85 // 蓝色像素
86 let blue_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg==";
87
88 // 事件循环
89 loop {
90 let event = read_message(activity.event_stream())?;
91 let event_type = event["type"].as_str().unwrap_or("");
92 let event_value = &event["value"];
93
94 match event_type {
95 "destroy" => {
96 // Activity 已被系统销毁,直接退出即可
97 println!("\n✓ Activity 已关闭");
98 return Ok(());
99 },
100 "click" => {
101 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
102
103 if clicked_id == red_btn.id() {
104 println!("🔴 切换到红色图片");
105 image_view.set_image(&mut activity, red_png)?;
106 status.set_text(&mut activity, "🔴 红色图片")?;
107 status.set_text_color(&mut activity, 0xFFF44336u32 as i32)?;
108 } else if clicked_id == green_btn.id() {
109 println!("🟢 切换到绿色图片");
110 image_view.set_image(&mut activity, green_png)?;
111 status.set_text(&mut activity, "🟢 绿色图片")?;
112 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
113 } else if clicked_id == blue_btn.id() {
114 println!("🔵 切换到蓝色图片");
115 image_view.set_image(&mut activity, blue_png)?;
116 status.set_text(&mut activity, "🔵 蓝色图片")?;
117 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
118 }
119 },
120 _ => {}
121 }
122 }
123}examples/checkbox_demo_v2.rs (line 81)
33fn main() -> Result<()> {
34 println!("=== Checkbox 复选框演示 (新库版本) ===\n");
35
36 // 创建 Activity(对话框模式)
37 let mut activity = Activity::new(true)?;
38 println!("✓ 连接建立\n");
39
40 // 创建主布局
41 let layout = activity.create_linear_layout(None)?;
42
43 // 创建标题
44 let title = activity.create_text_view("选择你喜欢的功能 ✅", Some(layout.id()))?;
45 title.set_text_size(&mut activity, 26)?;
46 title.view().set_margin(&mut activity, 10)?;
47 title.view().set_height_wrap_content(&mut activity)?;
48
49 // 创建 Checkbox 1 - WiFi (初始未选中)
50 let checkbox1 = activity.create_checkbox_checked("📶 WiFi", Some(layout.id()), false)?;
51 checkbox1.view().set_margin(&mut activity, 5)?;
52 checkbox1.view().set_height_wrap_content(&mut activity)?;
53
54 // 创建 Checkbox 2 - 蓝牙 (初始选中)
55 let checkbox2 = activity.create_checkbox_checked("📡 蓝牙", Some(layout.id()), true)?;
56 checkbox2.view().set_margin(&mut activity, 5)?;
57 checkbox2.view().set_height_wrap_content(&mut activity)?;
58
59 // 创建 Checkbox 3 - 定位 (初始未选中)
60 let checkbox3 = activity.create_checkbox_checked("📍 定位服务", Some(layout.id()), false)?;
61 checkbox3.view().set_margin(&mut activity, 5)?;
62 checkbox3.view().set_height_wrap_content(&mut activity)?;
63
64 // 创建 Checkbox 4 - 通知 (初始选中)
65 let checkbox4 = activity.create_checkbox_checked("🔔 通知", Some(layout.id()), true)?;
66 checkbox4.view().set_margin(&mut activity, 5)?;
67 checkbox4.view().set_height_wrap_content(&mut activity)?;
68
69 // 创建分隔线
70 let separator = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
71 separator.view().set_height_wrap_content(&mut activity)?;
72
73 // 创建状态显示
74 let status = activity.create_text_view("当前选中: 蓝牙, 通知", Some(layout.id()))?;
75 status.view().set_margin(&mut activity, 10)?;
76 status.view().set_height_wrap_content(&mut activity)?;
77 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
78
79 // 创建按钮
80 let apply_button = activity.create_button("✅ 应用设置", Some(layout.id()))?;
81 apply_button.view().set_margin(&mut activity, 10)?;
82 apply_button.view().set_height_wrap_content(&mut activity)?;
83
84 println!("✓ 界面创建完成\n");
85 println!("━━━━━━━━━━━━━━━━━━━━━━");
86 println!("提示:");
87 println!(" • 点击复选框切换状态");
88 println!(" • 观察状态实时更新");
89 println!(" • 点击 '应用设置' 查看最终选择");
90 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
91
92 // 状态跟踪
93 let mut wifi_checked = false;
94 let mut bluetooth_checked = true;
95 let mut location_checked = false;
96 let mut notification_checked = true;
97
98 // 事件循环
99 loop {
100 let event = read_message(activity.event_stream())?;
101 let event_type = event["type"].as_str().unwrap_or("");
102 let event_value = &event["value"];
103
104 match event_type {
105 "destroy" => {
106 // Activity 已被系统销毁,直接退出即可
107 // 不要调用 activity.finish(),因为 Activity 已经不存在了
108 println!("\n✓ Activity 已关闭");
109 return Ok(());
110 },
111 "click" => {
112 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
113 let is_checked = event_value["set"].as_bool().unwrap_or(false);
114
115 if clicked_id == checkbox1.id() {
116 wifi_checked = is_checked;
117 println!("📶 WiFi: {}", if is_checked { "开启" } else { "关闭" });
118 update_status_text(&mut activity, &status,
119 wifi_checked, bluetooth_checked,
120 location_checked, notification_checked)?;
121
122 } else if clicked_id == checkbox2.id() {
123 bluetooth_checked = is_checked;
124 println!("📡 蓝牙: {}", if is_checked { "开启" } else { "关闭" });
125 update_status_text(&mut activity, &status,
126 wifi_checked, bluetooth_checked,
127 location_checked, notification_checked)?;
128
129 } else if clicked_id == checkbox3.id() {
130 location_checked = is_checked;
131 println!("📍 定位: {}", if is_checked { "开启" } else { "关闭" });
132 update_status_text(&mut activity, &status,
133 wifi_checked, bluetooth_checked,
134 location_checked, notification_checked)?;
135
136 } else if clicked_id == checkbox4.id() {
137 notification_checked = is_checked;
138 println!("🔔 通知: {}", if is_checked { "开启" } else { "关闭" });
139 update_status_text(&mut activity, &status,
140 wifi_checked, bluetooth_checked,
141 location_checked, notification_checked)?;
142
143 } else if clicked_id == apply_button.id() {
144 println!("\n✅ 应用设置:");
145 println!(" WiFi: {}", if wifi_checked { "✓" } else { "✗" });
146 println!(" 蓝牙: {}", if bluetooth_checked { "✓" } else { "✗" });
147 println!(" 定位: {}", if location_checked { "✓" } else { "✗" });
148 println!(" 通知: {}", if notification_checked { "✓" } else { "✗" });
149
150 // 显示确认消息
151 status.set_text(&mut activity, "✅ 设置已应用!")?;
152 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
153 }
154 },
155 _ => {}
156 }
157 }
158}examples/horizontal_scroll_demo_v2.rs (line 56)
8fn main() -> Result<()> {
9 println!("=== HorizontalScrollView 水平滚动演示 (新库版本) ===\n");
10
11 // 创建 Activity(全屏模式)
12 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 // 创建主垂直布局
16 let main_layout = activity.create_linear_layout(None)?;
17 main_layout.view().set_margin(&mut activity, 15)?;
18
19 // 创建标题
20 let title = activity.create_text_view("↔️ HorizontalScrollView 演示", Some(main_layout.id()))?;
21 title.set_text_size(&mut activity, 26)?;
22 title.view().set_margin(&mut activity, 10)?;
23 title.view().set_height_wrap_content(&mut activity)?;
24 title.view().set_linear_layout_params(&mut activity, 0, None)?;
25
26 // 创建说明
27 let desc = activity.create_text_view("左右滑动查看更多按钮", Some(main_layout.id()))?;
28 desc.view().set_margin(&mut activity, 5)?;
29 desc.view().set_height_wrap_content(&mut activity)?;
30 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
31
32 // ========== 第一行: 水果按钮 ==========
33 let section1 = activity.create_text_view("第一行: 水果按钮(左右滑动)", Some(main_layout.id()))?;
34 section1.set_text_size(&mut activity, 18)?;
35 section1.view().set_margin(&mut activity, 10)?;
36 section1.view().set_height_wrap_content(&mut activity)?;
37 section1.view().set_linear_layout_params(&mut activity, 0, None)?;
38 section1.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
39
40 // 创建第一个 HorizontalScrollView
41 let h_scroll1 = activity.create_horizontal_scroll_view(Some(main_layout.id()))?;
42 h_scroll1.view().set_margin(&mut activity, 10)?;
43 h_scroll1.view().set_height_wrap_content(&mut activity)?;
44 h_scroll1.view().set_linear_layout_params(&mut activity, 0, None)?;
45
46 // 在 HorizontalScrollView 内创建水平 LinearLayout
47 let h_layout1 = activity.create_linear_layout_horizontal(Some(h_scroll1.id()))?;
48 h_layout1.view().set_height_wrap_content(&mut activity)?;
49
50 // 添加10个水果按钮
51 let fruits = ["🍎 苹果", "🍊 橙子", "🍌 香蕉", "🍇 葡萄", "🍓 草莓",
52 "🍑 桃子", "🍒 樱桃", "🍍 菠萝", "🥝 猕猴桃", "🥭 芒果"];
53 let mut fruit_buttons = Vec::new();
54 for fruit in &fruits {
55 let btn = activity.create_button(fruit, Some(h_layout1.id()))?;
56 btn.view().set_width(&mut activity, 180)?; // 固定宽度180dp
57 btn.view().set_margin(&mut activity, 5)?;
58 fruit_buttons.push(btn);
59 }
60
61 // ========== 第二行: 数字按钮 ==========
62 let section2 = activity.create_text_view("第二行: 数字按钮(左右滑动)", Some(main_layout.id()))?;
63 section2.set_text_size(&mut activity, 18)?;
64 section2.view().set_margin(&mut activity, 10)?;
65 section2.view().set_height_wrap_content(&mut activity)?;
66 section2.view().set_linear_layout_params(&mut activity, 0, None)?;
67 section2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
68
69 // 创建第二个 HorizontalScrollView
70 let h_scroll2 = activity.create_horizontal_scroll_view(Some(main_layout.id()))?;
71 h_scroll2.view().set_margin(&mut activity, 10)?;
72 h_scroll2.view().set_height_wrap_content(&mut activity)?;
73 h_scroll2.view().set_linear_layout_params(&mut activity, 0, None)?;
74
75 // 在 HorizontalScrollView 内创建水平 LinearLayout
76 let h_layout2 = activity.create_linear_layout_horizontal(Some(h_scroll2.id()))?;
77 h_layout2.view().set_height_wrap_content(&mut activity)?;
78
79 // 添加20个数字按钮
80 let mut number_buttons = Vec::new();
81 for i in 0..20 {
82 let btn = activity.create_button(&format!("数字 {}", i * 5), Some(h_layout2.id()))?;
83 btn.view().set_width(&mut activity, 150)?; // 固定宽度150dp
84 btn.view().set_margin(&mut activity, 5)?;
85 number_buttons.push(btn);
86 }
87
88 // ========== 底部信息 ==========
89 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(main_layout.id()))?;
90 divider.view().set_margin(&mut activity, 10)?;
91 divider.view().set_height_wrap_content(&mut activity)?;
92 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
93
94 let info = activity.create_text_view(
95 "💡 提示:\n\
96 • 在每一行中左右滑动\n\
97 • 点击任意按钮查看效果\n\
98 • HorizontalScrollView 支持水平滚动",
99 Some(main_layout.id())
100 )?;
101 info.view().set_margin(&mut activity, 10)?;
102 info.view().set_height_wrap_content(&mut activity)?;
103 info.view().set_linear_layout_params(&mut activity, 0, None)?;
104 info.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
105
106 // 状态显示
107 let status = activity.create_text_view("准备就绪 - 尝试左右滑动", Some(main_layout.id()))?;
108 status.view().set_margin(&mut activity, 10)?;
109 status.view().set_height_wrap_content(&mut activity)?;
110 status.view().set_linear_layout_params(&mut activity, 0, None)?;
111 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
112
113 println!("✓ 界面创建完成\n");
114 println!("━━━━━━━━━━━━━━━━━━━━━━");
115 println!("提示:");
116 println!(" • 第一行: 10个水果按钮");
117 println!(" • 第二行: 20个数字按钮");
118 println!(" • 左右滑动查看更多内容");
119 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
120
121 // 事件循环
122 loop {
123 let event = read_message(activity.event_stream())?;
124 let event_type = event["type"].as_str().unwrap_or("");
125 let event_value = &event["value"];
126
127 match event_type {
128 "destroy" => {
129 println!("\n✓ Activity 已关闭");
130 return Ok(());
131 },
132 "click" => {
133 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
134
135 // 检查水果按钮
136 for (i, btn) in fruit_buttons.iter().enumerate() {
137 if clicked_id == btn.id() {
138 println!("✅ 选择: {}", fruits[i]);
139 status.set_text(&mut activity, &format!("✅ 选择: {}", fruits[i]))?;
140 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
141 break;
142 }
143 }
144
145 // 检查数字按钮
146 for (i, btn) in number_buttons.iter().enumerate() {
147 if clicked_id == btn.id() {
148 let value = i * 5;
149 println!("🔢 选择数字: {}", value);
150 status.set_text(&mut activity, &format!("🔢 选择数字: {}", value))?;
151 status.set_text_color(&mut activity, 0xFFFF9800u32 as i32)?;
152 break;
153 }
154 }
155 },
156 _ => {}
157 }
158 }
159}examples/switch_demo_v2.rs (line 123)
48fn main() -> Result<()> {
49 println!("=== Switch 开关演示 (新库版本) ===\n");
50
51 // 创建 Activity(对话框模式)
52 let mut activity = Activity::new(true)?;
53 println!("✓ 连接建立\n");
54
55 // 创建主布局
56 let layout = activity.create_linear_layout(None)?;
57
58 // 创建标题
59 let title = activity.create_text_view("智能家居控制 🏠", Some(layout.id()))?;
60 title.set_text_size(&mut activity, 28)?;
61 title.view().set_margin(&mut activity, 10)?;
62 title.view().set_height_wrap_content(&mut activity)?;
63 title.view().set_linear_layout_params(&mut activity, 0, None)?;
64
65 // 创建说明
66 let desc = activity.create_text_view("滑动开关控制设备", Some(layout.id()))?;
67 desc.view().set_margin(&mut activity, 5)?;
68 desc.view().set_height_wrap_content(&mut activity)?;
69 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
70
71 // 创建 Switch 1 - 客厅灯(初始开启)
72 let switch1 = activity.create_switch_checked("💡 客厅灯", Some(layout.id()), true)?;
73 switch1.view().set_margin(&mut activity, 8)?;
74 switch1.view().set_height_wrap_content(&mut activity)?;
75 switch1.view().set_linear_layout_params(&mut activity, 0, None)?;
76
77 // 创建 Switch 2 - 空调(初始关闭)
78 let switch2 = activity.create_switch_checked("❄️ 空调", Some(layout.id()), false)?;
79 switch2.view().set_margin(&mut activity, 8)?;
80 switch2.view().set_height_wrap_content(&mut activity)?;
81 switch2.view().set_linear_layout_params(&mut activity, 0, None)?;
82
83 // 创建 Switch 3 - 加湿器(初始关闭)
84 let switch3 = activity.create_switch_checked("💧 加湿器", Some(layout.id()), false)?;
85 switch3.view().set_margin(&mut activity, 8)?;
86 switch3.view().set_height_wrap_content(&mut activity)?;
87 switch3.view().set_linear_layout_params(&mut activity, 0, None)?;
88
89 // 创建 Switch 4 - 窗帘(初始开启)
90 let switch4 = activity.create_switch_checked("🪟 电动窗帘", Some(layout.id()), true)?;
91 switch4.view().set_margin(&mut activity, 8)?;
92 switch4.view().set_height_wrap_content(&mut activity)?;
93 switch4.view().set_linear_layout_params(&mut activity, 0, None)?;
94
95 // 创建 Switch 5 - 音乐(初始关闭)
96 let switch5 = activity.create_switch_checked("🎵 背景音乐", Some(layout.id()), false)?;
97 switch5.view().set_margin(&mut activity, 8)?;
98 switch5.view().set_height_wrap_content(&mut activity)?;
99 switch5.view().set_linear_layout_params(&mut activity, 0, None)?;
100
101 // 创建分隔线
102 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
103 divider.view().set_margin(&mut activity, 10)?;
104 divider.view().set_height_wrap_content(&mut activity)?;
105 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
106
107 // 创建状态显示
108 let status = activity.create_text_view("已开启: 客厅灯, 窗帘", Some(layout.id()))?;
109 status.set_text_size(&mut activity, 16)?;
110 status.view().set_margin(&mut activity, 10)?;
111 status.view().set_height_wrap_content(&mut activity)?;
112 status.view().set_linear_layout_params(&mut activity, 0, None)?;
113 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
114
115 // 创建按钮布局(水平)
116 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
117 button_layout.view().set_margin(&mut activity, 10)?;
118 button_layout.view().set_height_wrap_content(&mut activity)?;
119 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
120
121 // 创建全部开启按钮
122 let all_on_btn = activity.create_button("🔆 全部开启", Some(button_layout.id()))?;
123 all_on_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
124
125 // 创建全部关闭按钮
126 let all_off_btn = activity.create_button("🌙 全部关闭", Some(button_layout.id()))?;
127 all_off_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
128
129 println!("✓ 界面创建完成\n");
130 println!("━━━━━━━━━━━━━━━━━━━━━━");
131 println!("提示:");
132 println!(" • 滑动开关切换设备状态");
133 println!(" • 观察状态实时更新");
134 println!(" • 使用 '全部开启/关闭' 按钮");
135 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
136
137 // 状态跟踪
138 let mut light_on = true;
139 let mut ac_on = false;
140 let mut humidifier_on = false;
141 let mut curtain_on = true;
142 let mut music_on = false;
143
144 // 事件循环
145 loop {
146 let event = read_message(activity.event_stream())?;
147 let event_type = event["type"].as_str().unwrap_or("");
148 let event_value = &event["value"];
149
150 match event_type {
151 "destroy" => {
152 // Activity 已被系统销毁,直接退出即可
153 // 不要调用 activity.finish(),因为 Activity 已经不存在了
154 println!("\n✓ Activity 已关闭");
155 return Ok(());
156 },
157 "click" => {
158 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
159 let is_checked = event_value["set"].as_bool().unwrap_or(false);
160
161 if clicked_id == switch1.id() {
162 light_on = is_checked;
163 println!("💡 客厅灯: {}", if is_checked { "开启" } else { "关闭" });
164 } else if clicked_id == switch2.id() {
165 ac_on = is_checked;
166 println!("❄️ 空调: {}", if is_checked { "开启" } else { "关闭" });
167 } else if clicked_id == switch3.id() {
168 humidifier_on = is_checked;
169 println!("💧 加湿器: {}", if is_checked { "开启" } else { "关闭" });
170 } else if clicked_id == switch4.id() {
171 curtain_on = is_checked;
172 println!("🪟 窗帘: {}", if is_checked { "打开" } else { "关闭" });
173 } else if clicked_id == switch5.id() {
174 music_on = is_checked;
175 println!("🎵 音乐: {}", if is_checked { "播放" } else { "停止" });
176 } else if clicked_id == all_on_btn.id() {
177 println!("\n🔆 全部开启");
178 light_on = true;
179 ac_on = true;
180 humidifier_on = true;
181 curtain_on = true;
182 music_on = true;
183
184 switch1.set_checked(&mut activity, true)?;
185 switch2.set_checked(&mut activity, true)?;
186 switch3.set_checked(&mut activity, true)?;
187 switch4.set_checked(&mut activity, true)?;
188 switch5.set_checked(&mut activity, true)?;
189 } else if clicked_id == all_off_btn.id() {
190 println!("\n🌙 全部关闭");
191 light_on = false;
192 ac_on = false;
193 humidifier_on = false;
194 curtain_on = false;
195 music_on = false;
196
197 switch1.set_checked(&mut activity, false)?;
198 switch2.set_checked(&mut activity, false)?;
199 switch3.set_checked(&mut activity, false)?;
200 switch4.set_checked(&mut activity, false)?;
201 switch5.set_checked(&mut activity, false)?;
202 }
203
204 update_status(&mut activity, &status,
205 light_on, ac_on, humidifier_on, curtain_on, music_on)?;
206 },
207 _ => {}
208 }
209 }
210}examples/toggle_demo_v2.rs (line 75)
8fn main() -> Result<()> {
9 println!("=== ToggleButton 切换按钮演示 (新库版本) ===\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("🔘 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 // 创建说明
26 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 // 创建 ToggleButton 1 - WiFi(关闭)
32 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 // 创建 ToggleButton 2 - 蓝牙(开启)
38 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 // 创建 ToggleButton 3 - GPS(关闭)
44 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 // 创建 ToggleButton 4 - 飞行模式(关闭)
50 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 // 创建分隔线
56 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 // 创建状态显示
62 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 // 创建按钮布局
69 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 // 状态跟踪
89 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 // 更新状态显示的辅助函数
95 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 // 如果开启飞行模式,文字显示橙色警告
116 let color = if airplane {
117 0xFFFF9800u32 as i32 // 橙色
118 } else if active.is_empty() {
119 0xFF9E9E9Eu32 as i32 // 灰色
120 } else {
121 0xFF2196F3u32 as i32 // 蓝色
122 };
123 status.set_text_color(activity, color)?;
124
125 Ok(())
126 };
127
128 // 事件循环
129 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 // Activity 已被系统销毁,直接退出即可
137 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}Auto Trait Implementations§
impl Freeze for Button
impl RefUnwindSafe for Button
impl Send for Button
impl Sync for Button
impl Unpin for Button
impl UnwindSafe for Button
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