pub struct EditText { /* private fields */ }Expand description
An EditText allows text input
Implementations§
Source§impl EditText
impl EditText
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 EditText (single-line by default)
Sourcepub fn new_multiline(
activity: &mut Activity,
text: &str,
parent: Option<i64>,
) -> Result<Self>
pub fn new_multiline( activity: &mut Activity, text: &str, parent: Option<i64>, ) -> Result<Self>
Create a new multi-line EditText
Sourcepub fn new_with_options(
activity: &mut Activity,
text: &str,
parent: Option<i64>,
singleline: bool,
input_type: &str,
) -> Result<Self>
pub fn new_with_options( activity: &mut Activity, text: &str, parent: Option<i64>, singleline: bool, input_type: &str, ) -> Result<Self>
Create a new EditText with full options
Sourcepub fn id(&self) -> i64
pub fn id(&self) -> i64
Get the view ID
Examples found in repository?
examples/input_demo_v2.rs (line 195)
8fn main() -> Result<()> {
9 println!("=== 输入框交互演示 (新库版本) ===\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, 28)?;
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 desc1 = activity.create_text_view("在下方输入你的名字:", Some(layout.id()))?;
27 desc1.view().set_margin(&mut activity, 5)?;
28 desc1.view().set_height_wrap_content(&mut activity)?;
29 desc1.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // 创建输入框 1 - 姓名(单行文本)
32 let name_input = activity.create_edit_text("", Some(layout.id()))?;
33 name_input.set_hint(&mut activity, "请输入姓名")?;
34 name_input.view().set_margin(&mut activity, 5)?;
35 name_input.view().set_height_wrap_content(&mut activity)?;
36 name_input.view().set_linear_layout_params(&mut activity, 0, None)?;
37
38 // 创建说明文本2
39 let desc2 = activity.create_text_view("输入一个数字:", Some(layout.id()))?;
40 desc2.view().set_margin(&mut activity, 5)?;
41 desc2.view().set_height_wrap_content(&mut activity)?;
42 desc2.view().set_linear_layout_params(&mut activity, 0, None)?;
43
44 // 创建输入框 2 - 数字
45 let number_input = activity.create_edit_text("0", Some(layout.id()))?;
46 number_input.set_hint(&mut activity, "请输入数字")?;
47 number_input.view().set_margin(&mut activity, 5)?;
48 number_input.view().set_height_wrap_content(&mut activity)?;
49 number_input.view().set_linear_layout_params(&mut activity, 0, None)?;
50
51 // 创建说明文本3
52 let desc3 = activity.create_text_view("输入多行消息:", Some(layout.id()))?;
53 desc3.view().set_margin(&mut activity, 5)?;
54 desc3.view().set_height_wrap_content(&mut activity)?;
55 desc3.view().set_linear_layout_params(&mut activity, 0, None)?;
56
57 // 创建输入框 3 - 多行文本
58 let message_input = activity.create_edit_text_multiline("", Some(layout.id()))?;
59 message_input.set_hint(&mut activity, "请输入消息(支持多行)")?;
60 message_input.view().set_margin(&mut activity, 5)?;
61 // 多行文本需要更多空间
62 message_input.view().set_linear_layout_params(&mut activity, 1, None)?;
63
64 // 创建按钮布局(水平)
65 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
66 button_layout.view().set_margin(&mut activity, 10)?;
67 button_layout.view().set_height_wrap_content(&mut activity)?;
68 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
69
70 // 创建提交按钮
71 let submit_button = activity.create_button("✅ 提交", Some(button_layout.id()))?;
72 submit_button.view().set_linear_layout_params(&mut activity, 1, None)?;
73
74 // 创建清空按钮
75 let clear_button = activity.create_button("🗑️ 清空", Some(button_layout.id()))?;
76 clear_button.view().set_linear_layout_params(&mut activity, 1, None)?;
77
78 // 创建测试按钮
79 let test_button = activity.create_button("🧪 测试", Some(button_layout.id()))?;
80 test_button.view().set_linear_layout_params(&mut activity, 1, None)?;
81
82 // 创建分隔线
83 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
84 divider.view().set_margin(&mut activity, 10)?;
85 divider.view().set_height_wrap_content(&mut activity)?;
86 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
87
88 // 创建结果显示区域
89 let result = activity.create_text_view("结果将显示在这里...", Some(layout.id()))?;
90 result.set_text_size(&mut activity, 16)?;
91 result.view().set_margin(&mut activity, 10)?;
92 result.view().set_linear_layout_params(&mut activity, 1, None)?;
93
94 println!("✓ 界面创建完成\n");
95 println!("━━━━━━━━━━━━━━━━━━━━━━");
96 println!("提示:");
97 println!(" • 在输入框中输入内容");
98 println!(" • 点击 '提交' 查看输入的内容");
99 println!(" • 点击 '清空' 清除所有输入");
100 println!(" • 点击 '测试' 填充测试数据");
101 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
102
103 // 事件循环
104 loop {
105 let event = read_message(activity.event_stream())?;
106 let event_type = event["type"].as_str().unwrap_or("");
107 let event_value = &event["value"];
108
109 match event_type {
110 "destroy" => {
111 // Activity 已被系统销毁,直接退出即可
112 // 不要调用 activity.finish(),因为 Activity 已经不存在了
113 println!("\n✓ Activity 已关闭");
114 return Ok(());
115 },
116 "click" => {
117 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
118
119 if clicked_id == submit_button.id() {
120 println!("📨 提交按钮被点击");
121
122 // 获取姓名输入框的文本
123 let name = name_input.get_text(&mut activity)?;
124
125 // 获取数字输入框的文本
126 let number_str = number_input.get_text(&mut activity)?;
127 let number: i32 = number_str.parse().unwrap_or(0);
128
129 // 获取多行消息
130 let message = message_input.get_text(&mut activity)?;
131
132 // 构建结果文本
133 let result_text = if name.is_empty() {
134 "⚠️ 请输入姓名!".to_string()
135 } else {
136 let doubled = number * 2;
137 let msg_part = if message.is_empty() {
138 String::new()
139 } else {
140 format!("\n\n消息:\n{}", message)
141 };
142
143 format!(
144 "✅ 提交成功!\n\n\
145 姓名: {}\n\
146 数字: {} (x2 = {}){}",
147 name, number, doubled, msg_part
148 )
149 };
150
151 // 更新结果显示
152 result.set_text(&mut activity, &result_text)?;
153
154 // 根据结果改变颜色
155 let color = if name.is_empty() {
156 0xFFF44336u32 as i32 // 红色(错误)
157 } else {
158 0xFF4CAF50u32 as i32 // 绿色(成功)
159 };
160 result.set_text_color(&mut activity, color)?;
161
162 println!(" 姓名: {}", name);
163 println!(" 数字: {}", number);
164 println!(" 消息: {}", if message.is_empty() { "(空)" } else { &message });
165
166 } else if clicked_id == clear_button.id() {
167 println!("🗑️ 清空按钮被点击");
168
169 // 清空所有输入框
170 name_input.set_text(&mut activity, "")?;
171 number_input.set_text(&mut activity, "0")?;
172 message_input.set_text(&mut activity, "")?;
173
174 // 清空结果显示
175 result.set_text(&mut activity, "已清空所有输入")?;
176 result.set_text_color(&mut activity, 0xFF9E9E9Eu32 as i32)?;
177
178 } else if clicked_id == test_button.id() {
179 println!("🧪 测试按钮被点击");
180
181 // 填充测试数据
182 name_input.set_text(&mut activity, "张三")?;
183 number_input.set_text(&mut activity, "42")?;
184 message_input.set_text(&mut activity, "这是一条测试消息。\n使用Rust编写的Termux:GUI应用!")?;
185
186 result.set_text(&mut activity, "✅ 已填充测试数据\n点击 '提交' 按钮查看结果")?;
187 result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
188 }
189 },
190 "text" => {
191 // EditText 文本变化事件(可选)
192 let view_id = event_value["id"].as_i64().unwrap_or(-1);
193 let text = event_value["text"].as_str().unwrap_or("");
194
195 if view_id == name_input.id() {
196 println!("📝 姓名输入框内容变化: {}", text);
197 } else if view_id == number_input.id() {
198 println!("🔢 数字输入框内容变化: {}", text);
199 }
200 },
201 _ => {}
202 }
203 }
204}Sourcepub fn view(&self) -> &View
pub fn view(&self) -> &View
Get the underlying View
Examples found in repository?
examples/input_demo_v2.rs (line 34)
8fn main() -> Result<()> {
9 println!("=== 输入框交互演示 (新库版本) ===\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, 28)?;
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 desc1 = activity.create_text_view("在下方输入你的名字:", Some(layout.id()))?;
27 desc1.view().set_margin(&mut activity, 5)?;
28 desc1.view().set_height_wrap_content(&mut activity)?;
29 desc1.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // 创建输入框 1 - 姓名(单行文本)
32 let name_input = activity.create_edit_text("", Some(layout.id()))?;
33 name_input.set_hint(&mut activity, "请输入姓名")?;
34 name_input.view().set_margin(&mut activity, 5)?;
35 name_input.view().set_height_wrap_content(&mut activity)?;
36 name_input.view().set_linear_layout_params(&mut activity, 0, None)?;
37
38 // 创建说明文本2
39 let desc2 = activity.create_text_view("输入一个数字:", Some(layout.id()))?;
40 desc2.view().set_margin(&mut activity, 5)?;
41 desc2.view().set_height_wrap_content(&mut activity)?;
42 desc2.view().set_linear_layout_params(&mut activity, 0, None)?;
43
44 // 创建输入框 2 - 数字
45 let number_input = activity.create_edit_text("0", Some(layout.id()))?;
46 number_input.set_hint(&mut activity, "请输入数字")?;
47 number_input.view().set_margin(&mut activity, 5)?;
48 number_input.view().set_height_wrap_content(&mut activity)?;
49 number_input.view().set_linear_layout_params(&mut activity, 0, None)?;
50
51 // 创建说明文本3
52 let desc3 = activity.create_text_view("输入多行消息:", Some(layout.id()))?;
53 desc3.view().set_margin(&mut activity, 5)?;
54 desc3.view().set_height_wrap_content(&mut activity)?;
55 desc3.view().set_linear_layout_params(&mut activity, 0, None)?;
56
57 // 创建输入框 3 - 多行文本
58 let message_input = activity.create_edit_text_multiline("", Some(layout.id()))?;
59 message_input.set_hint(&mut activity, "请输入消息(支持多行)")?;
60 message_input.view().set_margin(&mut activity, 5)?;
61 // 多行文本需要更多空间
62 message_input.view().set_linear_layout_params(&mut activity, 1, None)?;
63
64 // 创建按钮布局(水平)
65 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
66 button_layout.view().set_margin(&mut activity, 10)?;
67 button_layout.view().set_height_wrap_content(&mut activity)?;
68 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
69
70 // 创建提交按钮
71 let submit_button = activity.create_button("✅ 提交", Some(button_layout.id()))?;
72 submit_button.view().set_linear_layout_params(&mut activity, 1, None)?;
73
74 // 创建清空按钮
75 let clear_button = activity.create_button("🗑️ 清空", Some(button_layout.id()))?;
76 clear_button.view().set_linear_layout_params(&mut activity, 1, None)?;
77
78 // 创建测试按钮
79 let test_button = activity.create_button("🧪 测试", Some(button_layout.id()))?;
80 test_button.view().set_linear_layout_params(&mut activity, 1, None)?;
81
82 // 创建分隔线
83 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
84 divider.view().set_margin(&mut activity, 10)?;
85 divider.view().set_height_wrap_content(&mut activity)?;
86 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
87
88 // 创建结果显示区域
89 let result = activity.create_text_view("结果将显示在这里...", Some(layout.id()))?;
90 result.set_text_size(&mut activity, 16)?;
91 result.view().set_margin(&mut activity, 10)?;
92 result.view().set_linear_layout_params(&mut activity, 1, None)?;
93
94 println!("✓ 界面创建完成\n");
95 println!("━━━━━━━━━━━━━━━━━━━━━━");
96 println!("提示:");
97 println!(" • 在输入框中输入内容");
98 println!(" • 点击 '提交' 查看输入的内容");
99 println!(" • 点击 '清空' 清除所有输入");
100 println!(" • 点击 '测试' 填充测试数据");
101 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
102
103 // 事件循环
104 loop {
105 let event = read_message(activity.event_stream())?;
106 let event_type = event["type"].as_str().unwrap_or("");
107 let event_value = &event["value"];
108
109 match event_type {
110 "destroy" => {
111 // Activity 已被系统销毁,直接退出即可
112 // 不要调用 activity.finish(),因为 Activity 已经不存在了
113 println!("\n✓ Activity 已关闭");
114 return Ok(());
115 },
116 "click" => {
117 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
118
119 if clicked_id == submit_button.id() {
120 println!("📨 提交按钮被点击");
121
122 // 获取姓名输入框的文本
123 let name = name_input.get_text(&mut activity)?;
124
125 // 获取数字输入框的文本
126 let number_str = number_input.get_text(&mut activity)?;
127 let number: i32 = number_str.parse().unwrap_or(0);
128
129 // 获取多行消息
130 let message = message_input.get_text(&mut activity)?;
131
132 // 构建结果文本
133 let result_text = if name.is_empty() {
134 "⚠️ 请输入姓名!".to_string()
135 } else {
136 let doubled = number * 2;
137 let msg_part = if message.is_empty() {
138 String::new()
139 } else {
140 format!("\n\n消息:\n{}", message)
141 };
142
143 format!(
144 "✅ 提交成功!\n\n\
145 姓名: {}\n\
146 数字: {} (x2 = {}){}",
147 name, number, doubled, msg_part
148 )
149 };
150
151 // 更新结果显示
152 result.set_text(&mut activity, &result_text)?;
153
154 // 根据结果改变颜色
155 let color = if name.is_empty() {
156 0xFFF44336u32 as i32 // 红色(错误)
157 } else {
158 0xFF4CAF50u32 as i32 // 绿色(成功)
159 };
160 result.set_text_color(&mut activity, color)?;
161
162 println!(" 姓名: {}", name);
163 println!(" 数字: {}", number);
164 println!(" 消息: {}", if message.is_empty() { "(空)" } else { &message });
165
166 } else if clicked_id == clear_button.id() {
167 println!("🗑️ 清空按钮被点击");
168
169 // 清空所有输入框
170 name_input.set_text(&mut activity, "")?;
171 number_input.set_text(&mut activity, "0")?;
172 message_input.set_text(&mut activity, "")?;
173
174 // 清空结果显示
175 result.set_text(&mut activity, "已清空所有输入")?;
176 result.set_text_color(&mut activity, 0xFF9E9E9Eu32 as i32)?;
177
178 } else if clicked_id == test_button.id() {
179 println!("🧪 测试按钮被点击");
180
181 // 填充测试数据
182 name_input.set_text(&mut activity, "张三")?;
183 number_input.set_text(&mut activity, "42")?;
184 message_input.set_text(&mut activity, "这是一条测试消息。\n使用Rust编写的Termux:GUI应用!")?;
185
186 result.set_text(&mut activity, "✅ 已填充测试数据\n点击 '提交' 按钮查看结果")?;
187 result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
188 }
189 },
190 "text" => {
191 // EditText 文本变化事件(可选)
192 let view_id = event_value["id"].as_i64().unwrap_or(-1);
193 let text = event_value["text"].as_str().unwrap_or("");
194
195 if view_id == name_input.id() {
196 println!("📝 姓名输入框内容变化: {}", text);
197 } else if view_id == number_input.id() {
198 println!("🔢 数字输入框内容变化: {}", text);
199 }
200 },
201 _ => {}
202 }
203 }
204}Sourcepub fn set_text(&self, activity: &mut Activity, text: &str) -> Result<()>
pub fn set_text(&self, activity: &mut Activity, text: &str) -> Result<()>
Set the text content
Examples found in repository?
examples/input_demo_v2.rs (line 170)
8fn main() -> Result<()> {
9 println!("=== 输入框交互演示 (新库版本) ===\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, 28)?;
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 desc1 = activity.create_text_view("在下方输入你的名字:", Some(layout.id()))?;
27 desc1.view().set_margin(&mut activity, 5)?;
28 desc1.view().set_height_wrap_content(&mut activity)?;
29 desc1.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // 创建输入框 1 - 姓名(单行文本)
32 let name_input = activity.create_edit_text("", Some(layout.id()))?;
33 name_input.set_hint(&mut activity, "请输入姓名")?;
34 name_input.view().set_margin(&mut activity, 5)?;
35 name_input.view().set_height_wrap_content(&mut activity)?;
36 name_input.view().set_linear_layout_params(&mut activity, 0, None)?;
37
38 // 创建说明文本2
39 let desc2 = activity.create_text_view("输入一个数字:", Some(layout.id()))?;
40 desc2.view().set_margin(&mut activity, 5)?;
41 desc2.view().set_height_wrap_content(&mut activity)?;
42 desc2.view().set_linear_layout_params(&mut activity, 0, None)?;
43
44 // 创建输入框 2 - 数字
45 let number_input = activity.create_edit_text("0", Some(layout.id()))?;
46 number_input.set_hint(&mut activity, "请输入数字")?;
47 number_input.view().set_margin(&mut activity, 5)?;
48 number_input.view().set_height_wrap_content(&mut activity)?;
49 number_input.view().set_linear_layout_params(&mut activity, 0, None)?;
50
51 // 创建说明文本3
52 let desc3 = activity.create_text_view("输入多行消息:", Some(layout.id()))?;
53 desc3.view().set_margin(&mut activity, 5)?;
54 desc3.view().set_height_wrap_content(&mut activity)?;
55 desc3.view().set_linear_layout_params(&mut activity, 0, None)?;
56
57 // 创建输入框 3 - 多行文本
58 let message_input = activity.create_edit_text_multiline("", Some(layout.id()))?;
59 message_input.set_hint(&mut activity, "请输入消息(支持多行)")?;
60 message_input.view().set_margin(&mut activity, 5)?;
61 // 多行文本需要更多空间
62 message_input.view().set_linear_layout_params(&mut activity, 1, None)?;
63
64 // 创建按钮布局(水平)
65 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
66 button_layout.view().set_margin(&mut activity, 10)?;
67 button_layout.view().set_height_wrap_content(&mut activity)?;
68 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
69
70 // 创建提交按钮
71 let submit_button = activity.create_button("✅ 提交", Some(button_layout.id()))?;
72 submit_button.view().set_linear_layout_params(&mut activity, 1, None)?;
73
74 // 创建清空按钮
75 let clear_button = activity.create_button("🗑️ 清空", Some(button_layout.id()))?;
76 clear_button.view().set_linear_layout_params(&mut activity, 1, None)?;
77
78 // 创建测试按钮
79 let test_button = activity.create_button("🧪 测试", Some(button_layout.id()))?;
80 test_button.view().set_linear_layout_params(&mut activity, 1, None)?;
81
82 // 创建分隔线
83 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
84 divider.view().set_margin(&mut activity, 10)?;
85 divider.view().set_height_wrap_content(&mut activity)?;
86 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
87
88 // 创建结果显示区域
89 let result = activity.create_text_view("结果将显示在这里...", Some(layout.id()))?;
90 result.set_text_size(&mut activity, 16)?;
91 result.view().set_margin(&mut activity, 10)?;
92 result.view().set_linear_layout_params(&mut activity, 1, None)?;
93
94 println!("✓ 界面创建完成\n");
95 println!("━━━━━━━━━━━━━━━━━━━━━━");
96 println!("提示:");
97 println!(" • 在输入框中输入内容");
98 println!(" • 点击 '提交' 查看输入的内容");
99 println!(" • 点击 '清空' 清除所有输入");
100 println!(" • 点击 '测试' 填充测试数据");
101 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
102
103 // 事件循环
104 loop {
105 let event = read_message(activity.event_stream())?;
106 let event_type = event["type"].as_str().unwrap_or("");
107 let event_value = &event["value"];
108
109 match event_type {
110 "destroy" => {
111 // Activity 已被系统销毁,直接退出即可
112 // 不要调用 activity.finish(),因为 Activity 已经不存在了
113 println!("\n✓ Activity 已关闭");
114 return Ok(());
115 },
116 "click" => {
117 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
118
119 if clicked_id == submit_button.id() {
120 println!("📨 提交按钮被点击");
121
122 // 获取姓名输入框的文本
123 let name = name_input.get_text(&mut activity)?;
124
125 // 获取数字输入框的文本
126 let number_str = number_input.get_text(&mut activity)?;
127 let number: i32 = number_str.parse().unwrap_or(0);
128
129 // 获取多行消息
130 let message = message_input.get_text(&mut activity)?;
131
132 // 构建结果文本
133 let result_text = if name.is_empty() {
134 "⚠️ 请输入姓名!".to_string()
135 } else {
136 let doubled = number * 2;
137 let msg_part = if message.is_empty() {
138 String::new()
139 } else {
140 format!("\n\n消息:\n{}", message)
141 };
142
143 format!(
144 "✅ 提交成功!\n\n\
145 姓名: {}\n\
146 数字: {} (x2 = {}){}",
147 name, number, doubled, msg_part
148 )
149 };
150
151 // 更新结果显示
152 result.set_text(&mut activity, &result_text)?;
153
154 // 根据结果改变颜色
155 let color = if name.is_empty() {
156 0xFFF44336u32 as i32 // 红色(错误)
157 } else {
158 0xFF4CAF50u32 as i32 // 绿色(成功)
159 };
160 result.set_text_color(&mut activity, color)?;
161
162 println!(" 姓名: {}", name);
163 println!(" 数字: {}", number);
164 println!(" 消息: {}", if message.is_empty() { "(空)" } else { &message });
165
166 } else if clicked_id == clear_button.id() {
167 println!("🗑️ 清空按钮被点击");
168
169 // 清空所有输入框
170 name_input.set_text(&mut activity, "")?;
171 number_input.set_text(&mut activity, "0")?;
172 message_input.set_text(&mut activity, "")?;
173
174 // 清空结果显示
175 result.set_text(&mut activity, "已清空所有输入")?;
176 result.set_text_color(&mut activity, 0xFF9E9E9Eu32 as i32)?;
177
178 } else if clicked_id == test_button.id() {
179 println!("🧪 测试按钮被点击");
180
181 // 填充测试数据
182 name_input.set_text(&mut activity, "张三")?;
183 number_input.set_text(&mut activity, "42")?;
184 message_input.set_text(&mut activity, "这是一条测试消息。\n使用Rust编写的Termux:GUI应用!")?;
185
186 result.set_text(&mut activity, "✅ 已填充测试数据\n点击 '提交' 按钮查看结果")?;
187 result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
188 }
189 },
190 "text" => {
191 // EditText 文本变化事件(可选)
192 let view_id = event_value["id"].as_i64().unwrap_or(-1);
193 let text = event_value["text"].as_str().unwrap_or("");
194
195 if view_id == name_input.id() {
196 println!("📝 姓名输入框内容变化: {}", text);
197 } else if view_id == number_input.id() {
198 println!("🔢 数字输入框内容变化: {}", text);
199 }
200 },
201 _ => {}
202 }
203 }
204}Sourcepub fn set_hint(&self, activity: &mut Activity, hint: &str) -> Result<()>
pub fn set_hint(&self, activity: &mut Activity, hint: &str) -> Result<()>
Set hint text
Examples found in repository?
examples/input_demo_v2.rs (line 33)
8fn main() -> Result<()> {
9 println!("=== 输入框交互演示 (新库版本) ===\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, 28)?;
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 desc1 = activity.create_text_view("在下方输入你的名字:", Some(layout.id()))?;
27 desc1.view().set_margin(&mut activity, 5)?;
28 desc1.view().set_height_wrap_content(&mut activity)?;
29 desc1.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // 创建输入框 1 - 姓名(单行文本)
32 let name_input = activity.create_edit_text("", Some(layout.id()))?;
33 name_input.set_hint(&mut activity, "请输入姓名")?;
34 name_input.view().set_margin(&mut activity, 5)?;
35 name_input.view().set_height_wrap_content(&mut activity)?;
36 name_input.view().set_linear_layout_params(&mut activity, 0, None)?;
37
38 // 创建说明文本2
39 let desc2 = activity.create_text_view("输入一个数字:", Some(layout.id()))?;
40 desc2.view().set_margin(&mut activity, 5)?;
41 desc2.view().set_height_wrap_content(&mut activity)?;
42 desc2.view().set_linear_layout_params(&mut activity, 0, None)?;
43
44 // 创建输入框 2 - 数字
45 let number_input = activity.create_edit_text("0", Some(layout.id()))?;
46 number_input.set_hint(&mut activity, "请输入数字")?;
47 number_input.view().set_margin(&mut activity, 5)?;
48 number_input.view().set_height_wrap_content(&mut activity)?;
49 number_input.view().set_linear_layout_params(&mut activity, 0, None)?;
50
51 // 创建说明文本3
52 let desc3 = activity.create_text_view("输入多行消息:", Some(layout.id()))?;
53 desc3.view().set_margin(&mut activity, 5)?;
54 desc3.view().set_height_wrap_content(&mut activity)?;
55 desc3.view().set_linear_layout_params(&mut activity, 0, None)?;
56
57 // 创建输入框 3 - 多行文本
58 let message_input = activity.create_edit_text_multiline("", Some(layout.id()))?;
59 message_input.set_hint(&mut activity, "请输入消息(支持多行)")?;
60 message_input.view().set_margin(&mut activity, 5)?;
61 // 多行文本需要更多空间
62 message_input.view().set_linear_layout_params(&mut activity, 1, None)?;
63
64 // 创建按钮布局(水平)
65 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
66 button_layout.view().set_margin(&mut activity, 10)?;
67 button_layout.view().set_height_wrap_content(&mut activity)?;
68 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
69
70 // 创建提交按钮
71 let submit_button = activity.create_button("✅ 提交", Some(button_layout.id()))?;
72 submit_button.view().set_linear_layout_params(&mut activity, 1, None)?;
73
74 // 创建清空按钮
75 let clear_button = activity.create_button("🗑️ 清空", Some(button_layout.id()))?;
76 clear_button.view().set_linear_layout_params(&mut activity, 1, None)?;
77
78 // 创建测试按钮
79 let test_button = activity.create_button("🧪 测试", Some(button_layout.id()))?;
80 test_button.view().set_linear_layout_params(&mut activity, 1, None)?;
81
82 // 创建分隔线
83 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
84 divider.view().set_margin(&mut activity, 10)?;
85 divider.view().set_height_wrap_content(&mut activity)?;
86 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
87
88 // 创建结果显示区域
89 let result = activity.create_text_view("结果将显示在这里...", Some(layout.id()))?;
90 result.set_text_size(&mut activity, 16)?;
91 result.view().set_margin(&mut activity, 10)?;
92 result.view().set_linear_layout_params(&mut activity, 1, None)?;
93
94 println!("✓ 界面创建完成\n");
95 println!("━━━━━━━━━━━━━━━━━━━━━━");
96 println!("提示:");
97 println!(" • 在输入框中输入内容");
98 println!(" • 点击 '提交' 查看输入的内容");
99 println!(" • 点击 '清空' 清除所有输入");
100 println!(" • 点击 '测试' 填充测试数据");
101 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
102
103 // 事件循环
104 loop {
105 let event = read_message(activity.event_stream())?;
106 let event_type = event["type"].as_str().unwrap_or("");
107 let event_value = &event["value"];
108
109 match event_type {
110 "destroy" => {
111 // Activity 已被系统销毁,直接退出即可
112 // 不要调用 activity.finish(),因为 Activity 已经不存在了
113 println!("\n✓ Activity 已关闭");
114 return Ok(());
115 },
116 "click" => {
117 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
118
119 if clicked_id == submit_button.id() {
120 println!("📨 提交按钮被点击");
121
122 // 获取姓名输入框的文本
123 let name = name_input.get_text(&mut activity)?;
124
125 // 获取数字输入框的文本
126 let number_str = number_input.get_text(&mut activity)?;
127 let number: i32 = number_str.parse().unwrap_or(0);
128
129 // 获取多行消息
130 let message = message_input.get_text(&mut activity)?;
131
132 // 构建结果文本
133 let result_text = if name.is_empty() {
134 "⚠️ 请输入姓名!".to_string()
135 } else {
136 let doubled = number * 2;
137 let msg_part = if message.is_empty() {
138 String::new()
139 } else {
140 format!("\n\n消息:\n{}", message)
141 };
142
143 format!(
144 "✅ 提交成功!\n\n\
145 姓名: {}\n\
146 数字: {} (x2 = {}){}",
147 name, number, doubled, msg_part
148 )
149 };
150
151 // 更新结果显示
152 result.set_text(&mut activity, &result_text)?;
153
154 // 根据结果改变颜色
155 let color = if name.is_empty() {
156 0xFFF44336u32 as i32 // 红色(错误)
157 } else {
158 0xFF4CAF50u32 as i32 // 绿色(成功)
159 };
160 result.set_text_color(&mut activity, color)?;
161
162 println!(" 姓名: {}", name);
163 println!(" 数字: {}", number);
164 println!(" 消息: {}", if message.is_empty() { "(空)" } else { &message });
165
166 } else if clicked_id == clear_button.id() {
167 println!("🗑️ 清空按钮被点击");
168
169 // 清空所有输入框
170 name_input.set_text(&mut activity, "")?;
171 number_input.set_text(&mut activity, "0")?;
172 message_input.set_text(&mut activity, "")?;
173
174 // 清空结果显示
175 result.set_text(&mut activity, "已清空所有输入")?;
176 result.set_text_color(&mut activity, 0xFF9E9E9Eu32 as i32)?;
177
178 } else if clicked_id == test_button.id() {
179 println!("🧪 测试按钮被点击");
180
181 // 填充测试数据
182 name_input.set_text(&mut activity, "张三")?;
183 number_input.set_text(&mut activity, "42")?;
184 message_input.set_text(&mut activity, "这是一条测试消息。\n使用Rust编写的Termux:GUI应用!")?;
185
186 result.set_text(&mut activity, "✅ 已填充测试数据\n点击 '提交' 按钮查看结果")?;
187 result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
188 }
189 },
190 "text" => {
191 // EditText 文本变化事件(可选)
192 let view_id = event_value["id"].as_i64().unwrap_or(-1);
193 let text = event_value["text"].as_str().unwrap_or("");
194
195 if view_id == name_input.id() {
196 println!("📝 姓名输入框内容变化: {}", text);
197 } else if view_id == number_input.id() {
198 println!("🔢 数字输入框内容变化: {}", text);
199 }
200 },
201 _ => {}
202 }
203 }
204}Sourcepub fn get_text(&self, activity: &mut Activity) -> Result<String>
pub fn get_text(&self, activity: &mut Activity) -> Result<String>
Get the text content
Examples found in repository?
examples/input_demo_v2.rs (line 123)
8fn main() -> Result<()> {
9 println!("=== 输入框交互演示 (新库版本) ===\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, 28)?;
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 desc1 = activity.create_text_view("在下方输入你的名字:", Some(layout.id()))?;
27 desc1.view().set_margin(&mut activity, 5)?;
28 desc1.view().set_height_wrap_content(&mut activity)?;
29 desc1.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // 创建输入框 1 - 姓名(单行文本)
32 let name_input = activity.create_edit_text("", Some(layout.id()))?;
33 name_input.set_hint(&mut activity, "请输入姓名")?;
34 name_input.view().set_margin(&mut activity, 5)?;
35 name_input.view().set_height_wrap_content(&mut activity)?;
36 name_input.view().set_linear_layout_params(&mut activity, 0, None)?;
37
38 // 创建说明文本2
39 let desc2 = activity.create_text_view("输入一个数字:", Some(layout.id()))?;
40 desc2.view().set_margin(&mut activity, 5)?;
41 desc2.view().set_height_wrap_content(&mut activity)?;
42 desc2.view().set_linear_layout_params(&mut activity, 0, None)?;
43
44 // 创建输入框 2 - 数字
45 let number_input = activity.create_edit_text("0", Some(layout.id()))?;
46 number_input.set_hint(&mut activity, "请输入数字")?;
47 number_input.view().set_margin(&mut activity, 5)?;
48 number_input.view().set_height_wrap_content(&mut activity)?;
49 number_input.view().set_linear_layout_params(&mut activity, 0, None)?;
50
51 // 创建说明文本3
52 let desc3 = activity.create_text_view("输入多行消息:", Some(layout.id()))?;
53 desc3.view().set_margin(&mut activity, 5)?;
54 desc3.view().set_height_wrap_content(&mut activity)?;
55 desc3.view().set_linear_layout_params(&mut activity, 0, None)?;
56
57 // 创建输入框 3 - 多行文本
58 let message_input = activity.create_edit_text_multiline("", Some(layout.id()))?;
59 message_input.set_hint(&mut activity, "请输入消息(支持多行)")?;
60 message_input.view().set_margin(&mut activity, 5)?;
61 // 多行文本需要更多空间
62 message_input.view().set_linear_layout_params(&mut activity, 1, None)?;
63
64 // 创建按钮布局(水平)
65 let button_layout = activity.create_linear_layout_horizontal(Some(layout.id()))?;
66 button_layout.view().set_margin(&mut activity, 10)?;
67 button_layout.view().set_height_wrap_content(&mut activity)?;
68 button_layout.view().set_linear_layout_params(&mut activity, 0, None)?;
69
70 // 创建提交按钮
71 let submit_button = activity.create_button("✅ 提交", Some(button_layout.id()))?;
72 submit_button.view().set_linear_layout_params(&mut activity, 1, None)?;
73
74 // 创建清空按钮
75 let clear_button = activity.create_button("🗑️ 清空", Some(button_layout.id()))?;
76 clear_button.view().set_linear_layout_params(&mut activity, 1, None)?;
77
78 // 创建测试按钮
79 let test_button = activity.create_button("🧪 测试", Some(button_layout.id()))?;
80 test_button.view().set_linear_layout_params(&mut activity, 1, None)?;
81
82 // 创建分隔线
83 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
84 divider.view().set_margin(&mut activity, 10)?;
85 divider.view().set_height_wrap_content(&mut activity)?;
86 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
87
88 // 创建结果显示区域
89 let result = activity.create_text_view("结果将显示在这里...", Some(layout.id()))?;
90 result.set_text_size(&mut activity, 16)?;
91 result.view().set_margin(&mut activity, 10)?;
92 result.view().set_linear_layout_params(&mut activity, 1, None)?;
93
94 println!("✓ 界面创建完成\n");
95 println!("━━━━━━━━━━━━━━━━━━━━━━");
96 println!("提示:");
97 println!(" • 在输入框中输入内容");
98 println!(" • 点击 '提交' 查看输入的内容");
99 println!(" • 点击 '清空' 清除所有输入");
100 println!(" • 点击 '测试' 填充测试数据");
101 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
102
103 // 事件循环
104 loop {
105 let event = read_message(activity.event_stream())?;
106 let event_type = event["type"].as_str().unwrap_or("");
107 let event_value = &event["value"];
108
109 match event_type {
110 "destroy" => {
111 // Activity 已被系统销毁,直接退出即可
112 // 不要调用 activity.finish(),因为 Activity 已经不存在了
113 println!("\n✓ Activity 已关闭");
114 return Ok(());
115 },
116 "click" => {
117 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
118
119 if clicked_id == submit_button.id() {
120 println!("📨 提交按钮被点击");
121
122 // 获取姓名输入框的文本
123 let name = name_input.get_text(&mut activity)?;
124
125 // 获取数字输入框的文本
126 let number_str = number_input.get_text(&mut activity)?;
127 let number: i32 = number_str.parse().unwrap_or(0);
128
129 // 获取多行消息
130 let message = message_input.get_text(&mut activity)?;
131
132 // 构建结果文本
133 let result_text = if name.is_empty() {
134 "⚠️ 请输入姓名!".to_string()
135 } else {
136 let doubled = number * 2;
137 let msg_part = if message.is_empty() {
138 String::new()
139 } else {
140 format!("\n\n消息:\n{}", message)
141 };
142
143 format!(
144 "✅ 提交成功!\n\n\
145 姓名: {}\n\
146 数字: {} (x2 = {}){}",
147 name, number, doubled, msg_part
148 )
149 };
150
151 // 更新结果显示
152 result.set_text(&mut activity, &result_text)?;
153
154 // 根据结果改变颜色
155 let color = if name.is_empty() {
156 0xFFF44336u32 as i32 // 红色(错误)
157 } else {
158 0xFF4CAF50u32 as i32 // 绿色(成功)
159 };
160 result.set_text_color(&mut activity, color)?;
161
162 println!(" 姓名: {}", name);
163 println!(" 数字: {}", number);
164 println!(" 消息: {}", if message.is_empty() { "(空)" } else { &message });
165
166 } else if clicked_id == clear_button.id() {
167 println!("🗑️ 清空按钮被点击");
168
169 // 清空所有输入框
170 name_input.set_text(&mut activity, "")?;
171 number_input.set_text(&mut activity, "0")?;
172 message_input.set_text(&mut activity, "")?;
173
174 // 清空结果显示
175 result.set_text(&mut activity, "已清空所有输入")?;
176 result.set_text_color(&mut activity, 0xFF9E9E9Eu32 as i32)?;
177
178 } else if clicked_id == test_button.id() {
179 println!("🧪 测试按钮被点击");
180
181 // 填充测试数据
182 name_input.set_text(&mut activity, "张三")?;
183 number_input.set_text(&mut activity, "42")?;
184 message_input.set_text(&mut activity, "这是一条测试消息。\n使用Rust编写的Termux:GUI应用!")?;
185
186 result.set_text(&mut activity, "✅ 已填充测试数据\n点击 '提交' 按钮查看结果")?;
187 result.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
188 }
189 },
190 "text" => {
191 // EditText 文本变化事件(可选)
192 let view_id = event_value["id"].as_i64().unwrap_or(-1);
193 let text = event_value["text"].as_str().unwrap_or("");
194
195 if view_id == name_input.id() {
196 println!("📝 姓名输入框内容变化: {}", text);
197 } else if view_id == number_input.id() {
198 println!("🔢 数字输入框内容变化: {}", text);
199 }
200 },
201 _ => {}
202 }
203 }
204}Auto Trait Implementations§
impl Freeze for EditText
impl RefUnwindSafe for EditText
impl Send for EditText
impl Sync for EditText
impl Unpin for EditText
impl UnwindSafe for EditText
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