Button

Struct Button 

Source
pub struct Button { /* private fields */ }
Expand description

A Button that can be clicked

Implementations§

Source§

impl Button

Source

pub fn new( activity: &mut Activity, text: &str, parent: Option<i64>, ) -> Result<Self>

Create a new Button

Source

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
Hide additional 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}
Source

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
Hide additional 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}
Source

pub fn set_text(&self, activity: &mut Activity, text: &str) -> Result<()>

Set the button text

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V