pub struct ProgressBar { /* private fields */ }Expand description
A ProgressBar displays progress from 0 to 100
Implementations§
Source§impl ProgressBar
impl ProgressBar
Sourcepub fn new(activity: &mut Activity, parent: Option<i64>) -> Result<Self>
pub fn new(activity: &mut Activity, parent: Option<i64>) -> Result<Self>
Create a new ProgressBar
Sourcepub fn view(&self) -> &View
pub fn view(&self) -> &View
Get the underlying View
Examples found in repository?
examples/progress_demo_v2.rs (line 44)
10fn main() -> Result<()> {
11 println!("=== ProgressBar 进度条演示 (新库版本) ===\n");
12
13 // 创建 Activity(全屏模式)
14 let mut activity = Activity::new(false)?;
15 println!("✓ 连接建立\n");
16
17 // 创建 NestedScrollView 作为根布局(支持滚动)
18 let scroll = activity.create_nested_scroll_view(None)?;
19
20 // 创建主布局(放在 ScrollView 内)
21 let layout = activity.create_linear_layout(Some(scroll.id()))?;
22 layout.view().set_margin(&mut activity, 15)?;
23
24 // 创建标题
25 let title = activity.create_text_view("📊 进度条演示", Some(layout.id()))?;
26 title.set_text_size(&mut activity, 26)?;
27 title.view().set_margin(&mut activity, 10)?;
28 title.view().set_height_wrap_content(&mut activity)?;
29 title.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // 创建说明
32 let desc = activity.create_text_view("点击按钮控制进度", Some(layout.id()))?;
33 desc.view().set_margin(&mut activity, 5)?;
34 desc.view().set_height_wrap_content(&mut activity)?;
35 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
36
37 // 创建 ProgressBar 1 - 主进度条
38 let label1 = activity.create_text_view("主任务进度:", Some(layout.id()))?;
39 label1.view().set_margin(&mut activity, 10)?;
40 label1.view().set_height_wrap_content(&mut activity)?;
41 label1.view().set_linear_layout_params(&mut activity, 0, None)?;
42
43 let progress1 = activity.create_progress_bar(Some(layout.id()))?;
44 progress1.view().set_margin(&mut activity, 10)?;
45 progress1.view().set_width_match_parent(&mut activity)?;
46 progress1.view().set_height_wrap_content(&mut activity)?;
47 progress1.view().set_linear_layout_params(&mut activity, 0, None)?;
48 progress1.set_progress(&mut activity, 0)?;
49
50 let progress1_text = activity.create_text_view("0%", Some(layout.id()))?;
51 progress1_text.view().set_margin(&mut activity, 5)?;
52 progress1_text.view().set_height_wrap_content(&mut activity)?;
53 progress1_text.view().set_linear_layout_params(&mut activity, 0, None)?;
54 progress1_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
55
56 // 创建 ProgressBar 2 - 次要进度条
57 let label2 = activity.create_text_view("下载进度:", Some(layout.id()))?;
58 label2.view().set_margin(&mut activity, 10)?;
59 label2.view().set_height_wrap_content(&mut activity)?;
60 label2.view().set_linear_layout_params(&mut activity, 0, None)?;
61
62 let progress2 = activity.create_progress_bar(Some(layout.id()))?;
63 progress2.view().set_margin(&mut activity, 10)?;
64 progress2.view().set_width_match_parent(&mut activity)?;
65 progress2.view().set_height_wrap_content(&mut activity)?;
66 progress2.view().set_linear_layout_params(&mut activity, 0, None)?;
67 progress2.set_progress(&mut activity, 0)?;
68
69 let progress2_text = activity.create_text_view("0%", Some(layout.id()))?;
70 progress2_text.view().set_margin(&mut activity, 5)?;
71 progress2_text.view().set_height_wrap_content(&mut activity)?;
72 progress2_text.view().set_linear_layout_params(&mut activity, 0, None)?;
73 progress2_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
74
75 // 创建分隔线
76 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
77 divider.view().set_margin(&mut activity, 10)?;
78 divider.view().set_height_wrap_content(&mut activity)?;
79 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
80
81 // 创建按钮布局
82 let button_layout1 = activity.create_linear_layout_horizontal(Some(layout.id()))?;
83 button_layout1.view().set_margin(&mut activity, 10)?;
84 button_layout1.view().set_height_wrap_content(&mut activity)?;
85 button_layout1.view().set_linear_layout_params(&mut activity, 0, None)?;
86
87 let inc_btn = activity.create_button("➕ 增加", Some(button_layout1.id()))?;
88 inc_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
89
90 let dec_btn = activity.create_button("➖ 减少", Some(button_layout1.id()))?;
91 dec_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
92
93 let reset_btn = activity.create_button("🔄 重置", Some(button_layout1.id()))?;
94 reset_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
95
96 // 第二行按钮
97 let button_layout2 = activity.create_linear_layout_horizontal(Some(layout.id()))?;
98 button_layout2.view().set_margin(&mut activity, 10)?;
99 button_layout2.view().set_height_wrap_content(&mut activity)?;
100 button_layout2.view().set_linear_layout_params(&mut activity, 0, None)?;
101
102 let auto_btn = activity.create_button("▶️ 自动演示", Some(button_layout2.id()))?;
103 auto_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
104
105 let complete_btn = activity.create_button("✅ 完成", Some(button_layout2.id()))?;
106 complete_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
107
108 println!("✓ 界面创建完成\n");
109 println!("━━━━━━━━━━━━━━━━━━━━━━");
110 println!("提示:");
111 println!(" • ➕ 增加 - 进度 +10%");
112 println!(" • ➖ 减少 - 进度 -10%");
113 println!(" • 🔄 重置 - 进度归零");
114 println!(" • ▶️ 自动演示 - 模拟加载过程");
115 println!(" • ✅ 完成 - 进度设为100%");
116 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
117
118 // 进度状态
119 let mut progress1_value = 0;
120 let mut progress2_value = 0;
121
122 // 事件循环
123 loop {
124 let event = read_message(activity.event_stream())?;
125 let event_type = event["type"].as_str().unwrap_or("");
126 let event_value = &event["value"];
127
128 match event_type {
129 "destroy" => {
130 // Activity 已被系统销毁,直接退出即可
131 println!("\n✓ Activity 已关闭");
132 return Ok(());
133 },
134 "click" => {
135 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
136
137 if clicked_id == inc_btn.id() {
138 // 增加进度
139 progress1_value = (progress1_value + 10).min(100);
140 progress1.set_progress(&mut activity, progress1_value)?;
141 progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
142 println!("➕ 进度: {}%", progress1_value);
143
144 } else if clicked_id == dec_btn.id() {
145 // 减少进度
146 progress1_value = (progress1_value - 10).max(0);
147 progress1.set_progress(&mut activity, progress1_value)?;
148 progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
149 println!("➖ 进度: {}%", progress1_value);
150
151 } else if clicked_id == reset_btn.id() {
152 // 重置
153 progress1_value = 0;
154 progress2_value = 0;
155 progress1.set_progress(&mut activity, 0)?;
156 progress2.set_progress(&mut activity, 0)?;
157 progress1_text.set_text(&mut activity, "0%")?;
158 progress2_text.set_text(&mut activity, "0%")?;
159 progress1_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
160 progress2_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
161 println!("🔄 进度已重置");
162
163 } else if clicked_id == complete_btn.id() {
164 // 完成
165 progress1_value = 100;
166 progress2_value = 100;
167 progress1.set_progress(&mut activity, 100)?;
168 progress2.set_progress(&mut activity, 100)?;
169 progress1_text.set_text(&mut activity, "100% ✓")?;
170 progress2_text.set_text(&mut activity, "100% ✓")?;
171 progress1_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
172 progress2_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
173 println!("✅ 任务完成!");
174
175 } else if clicked_id == auto_btn.id() {
176 // 自动演示 - 模拟加载过程
177 println!("▶️ 开始自动演示...");
178 progress1_value = 0;
179 progress2_value = 0;
180
181 // 模拟两个进度条同时加载
182 for i in 0..=10 {
183 progress1_value = i * 10;
184 progress2_value = i * 10;
185
186 progress1.set_progress(&mut activity, progress1_value)?;
187 progress2.set_progress(&mut activity, progress2_value)?;
188
189 progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
190 progress2_text.set_text(&mut activity, &format!("{}%", progress2_value))?;
191
192 if i == 10 {
193 progress1_text.set_text(&mut activity, "100% ✓")?;
194 progress2_text.set_text(&mut activity, "100% ✓")?;
195 progress1_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
196 progress2_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
197 }
198
199 println!(" 进度: {}%", progress1_value);
200
201 // 延迟一下,让用户看到进度变化
202 thread::sleep(Duration::from_millis(300));
203 }
204
205 println!("✅ 自动演示完成!");
206 }
207 },
208 _ => {}
209 }
210 }
211}Sourcepub fn set_progress(&self, activity: &mut Activity, progress: i32) -> Result<()>
pub fn set_progress(&self, activity: &mut Activity, progress: i32) -> Result<()>
Set the progress value (0-100)
The progress must be an integer from 0 to 100 (inclusive).
Examples found in repository?
examples/progress_demo_v2.rs (line 48)
10fn main() -> Result<()> {
11 println!("=== ProgressBar 进度条演示 (新库版本) ===\n");
12
13 // 创建 Activity(全屏模式)
14 let mut activity = Activity::new(false)?;
15 println!("✓ 连接建立\n");
16
17 // 创建 NestedScrollView 作为根布局(支持滚动)
18 let scroll = activity.create_nested_scroll_view(None)?;
19
20 // 创建主布局(放在 ScrollView 内)
21 let layout = activity.create_linear_layout(Some(scroll.id()))?;
22 layout.view().set_margin(&mut activity, 15)?;
23
24 // 创建标题
25 let title = activity.create_text_view("📊 进度条演示", Some(layout.id()))?;
26 title.set_text_size(&mut activity, 26)?;
27 title.view().set_margin(&mut activity, 10)?;
28 title.view().set_height_wrap_content(&mut activity)?;
29 title.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // 创建说明
32 let desc = activity.create_text_view("点击按钮控制进度", Some(layout.id()))?;
33 desc.view().set_margin(&mut activity, 5)?;
34 desc.view().set_height_wrap_content(&mut activity)?;
35 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
36
37 // 创建 ProgressBar 1 - 主进度条
38 let label1 = activity.create_text_view("主任务进度:", Some(layout.id()))?;
39 label1.view().set_margin(&mut activity, 10)?;
40 label1.view().set_height_wrap_content(&mut activity)?;
41 label1.view().set_linear_layout_params(&mut activity, 0, None)?;
42
43 let progress1 = activity.create_progress_bar(Some(layout.id()))?;
44 progress1.view().set_margin(&mut activity, 10)?;
45 progress1.view().set_width_match_parent(&mut activity)?;
46 progress1.view().set_height_wrap_content(&mut activity)?;
47 progress1.view().set_linear_layout_params(&mut activity, 0, None)?;
48 progress1.set_progress(&mut activity, 0)?;
49
50 let progress1_text = activity.create_text_view("0%", Some(layout.id()))?;
51 progress1_text.view().set_margin(&mut activity, 5)?;
52 progress1_text.view().set_height_wrap_content(&mut activity)?;
53 progress1_text.view().set_linear_layout_params(&mut activity, 0, None)?;
54 progress1_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
55
56 // 创建 ProgressBar 2 - 次要进度条
57 let label2 = activity.create_text_view("下载进度:", Some(layout.id()))?;
58 label2.view().set_margin(&mut activity, 10)?;
59 label2.view().set_height_wrap_content(&mut activity)?;
60 label2.view().set_linear_layout_params(&mut activity, 0, None)?;
61
62 let progress2 = activity.create_progress_bar(Some(layout.id()))?;
63 progress2.view().set_margin(&mut activity, 10)?;
64 progress2.view().set_width_match_parent(&mut activity)?;
65 progress2.view().set_height_wrap_content(&mut activity)?;
66 progress2.view().set_linear_layout_params(&mut activity, 0, None)?;
67 progress2.set_progress(&mut activity, 0)?;
68
69 let progress2_text = activity.create_text_view("0%", Some(layout.id()))?;
70 progress2_text.view().set_margin(&mut activity, 5)?;
71 progress2_text.view().set_height_wrap_content(&mut activity)?;
72 progress2_text.view().set_linear_layout_params(&mut activity, 0, None)?;
73 progress2_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
74
75 // 创建分隔线
76 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
77 divider.view().set_margin(&mut activity, 10)?;
78 divider.view().set_height_wrap_content(&mut activity)?;
79 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
80
81 // 创建按钮布局
82 let button_layout1 = activity.create_linear_layout_horizontal(Some(layout.id()))?;
83 button_layout1.view().set_margin(&mut activity, 10)?;
84 button_layout1.view().set_height_wrap_content(&mut activity)?;
85 button_layout1.view().set_linear_layout_params(&mut activity, 0, None)?;
86
87 let inc_btn = activity.create_button("➕ 增加", Some(button_layout1.id()))?;
88 inc_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
89
90 let dec_btn = activity.create_button("➖ 减少", Some(button_layout1.id()))?;
91 dec_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
92
93 let reset_btn = activity.create_button("🔄 重置", Some(button_layout1.id()))?;
94 reset_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
95
96 // 第二行按钮
97 let button_layout2 = activity.create_linear_layout_horizontal(Some(layout.id()))?;
98 button_layout2.view().set_margin(&mut activity, 10)?;
99 button_layout2.view().set_height_wrap_content(&mut activity)?;
100 button_layout2.view().set_linear_layout_params(&mut activity, 0, None)?;
101
102 let auto_btn = activity.create_button("▶️ 自动演示", Some(button_layout2.id()))?;
103 auto_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
104
105 let complete_btn = activity.create_button("✅ 完成", Some(button_layout2.id()))?;
106 complete_btn.view().set_linear_layout_params(&mut activity, 1, None)?;
107
108 println!("✓ 界面创建完成\n");
109 println!("━━━━━━━━━━━━━━━━━━━━━━");
110 println!("提示:");
111 println!(" • ➕ 增加 - 进度 +10%");
112 println!(" • ➖ 减少 - 进度 -10%");
113 println!(" • 🔄 重置 - 进度归零");
114 println!(" • ▶️ 自动演示 - 模拟加载过程");
115 println!(" • ✅ 完成 - 进度设为100%");
116 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
117
118 // 进度状态
119 let mut progress1_value = 0;
120 let mut progress2_value = 0;
121
122 // 事件循环
123 loop {
124 let event = read_message(activity.event_stream())?;
125 let event_type = event["type"].as_str().unwrap_or("");
126 let event_value = &event["value"];
127
128 match event_type {
129 "destroy" => {
130 // Activity 已被系统销毁,直接退出即可
131 println!("\n✓ Activity 已关闭");
132 return Ok(());
133 },
134 "click" => {
135 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
136
137 if clicked_id == inc_btn.id() {
138 // 增加进度
139 progress1_value = (progress1_value + 10).min(100);
140 progress1.set_progress(&mut activity, progress1_value)?;
141 progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
142 println!("➕ 进度: {}%", progress1_value);
143
144 } else if clicked_id == dec_btn.id() {
145 // 减少进度
146 progress1_value = (progress1_value - 10).max(0);
147 progress1.set_progress(&mut activity, progress1_value)?;
148 progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
149 println!("➖ 进度: {}%", progress1_value);
150
151 } else if clicked_id == reset_btn.id() {
152 // 重置
153 progress1_value = 0;
154 progress2_value = 0;
155 progress1.set_progress(&mut activity, 0)?;
156 progress2.set_progress(&mut activity, 0)?;
157 progress1_text.set_text(&mut activity, "0%")?;
158 progress2_text.set_text(&mut activity, "0%")?;
159 progress1_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
160 progress2_text.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
161 println!("🔄 进度已重置");
162
163 } else if clicked_id == complete_btn.id() {
164 // 完成
165 progress1_value = 100;
166 progress2_value = 100;
167 progress1.set_progress(&mut activity, 100)?;
168 progress2.set_progress(&mut activity, 100)?;
169 progress1_text.set_text(&mut activity, "100% ✓")?;
170 progress2_text.set_text(&mut activity, "100% ✓")?;
171 progress1_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
172 progress2_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
173 println!("✅ 任务完成!");
174
175 } else if clicked_id == auto_btn.id() {
176 // 自动演示 - 模拟加载过程
177 println!("▶️ 开始自动演示...");
178 progress1_value = 0;
179 progress2_value = 0;
180
181 // 模拟两个进度条同时加载
182 for i in 0..=10 {
183 progress1_value = i * 10;
184 progress2_value = i * 10;
185
186 progress1.set_progress(&mut activity, progress1_value)?;
187 progress2.set_progress(&mut activity, progress2_value)?;
188
189 progress1_text.set_text(&mut activity, &format!("{}%", progress1_value))?;
190 progress2_text.set_text(&mut activity, &format!("{}%", progress2_value))?;
191
192 if i == 10 {
193 progress1_text.set_text(&mut activity, "100% ✓")?;
194 progress2_text.set_text(&mut activity, "100% ✓")?;
195 progress1_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
196 progress2_text.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
197 }
198
199 println!(" 进度: {}%", progress1_value);
200
201 // 延迟一下,让用户看到进度变化
202 thread::sleep(Duration::from_millis(300));
203 }
204
205 println!("✅ 自动演示完成!");
206 }
207 },
208 _ => {}
209 }
210 }
211}Auto Trait Implementations§
impl Freeze for ProgressBar
impl RefUnwindSafe for ProgressBar
impl Send for ProgressBar
impl Sync for ProgressBar
impl Unpin for ProgressBar
impl UnwindSafe for ProgressBar
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