pub struct Switch { /* private fields */ }Expand description
A Switch can be toggled on or off
Implementations§
Source§impl Switch
impl Switch
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 Switch (unchecked by default)
Sourcepub fn new_with_checked(
activity: &mut Activity,
text: &str,
parent: Option<i64>,
checked: bool,
) -> Result<Self>
pub fn new_with_checked( activity: &mut Activity, text: &str, parent: Option<i64>, checked: bool, ) -> Result<Self>
Create a new Switch with specified checked state
Sourcepub fn id(&self) -> i64
pub fn id(&self) -> i64
Get the view ID
Examples found in repository?
examples/switch_demo_v2.rs (line 161)
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}Sourcepub fn view(&self) -> &View
pub fn view(&self) -> &View
Get the underlying View
Examples found in repository?
examples/switch_demo_v2.rs (line 73)
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}Sourcepub fn set_checked(&self, activity: &mut Activity, checked: bool) -> Result<()>
pub fn set_checked(&self, activity: &mut Activity, checked: bool) -> Result<()>
Set checked state
Examples found in repository?
examples/switch_demo_v2.rs (line 184)
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}Auto Trait Implementations§
impl Freeze for Switch
impl RefUnwindSafe for Switch
impl Send for Switch
impl Sync for Switch
impl Unpin for Switch
impl UnwindSafe for Switch
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