EditText

Struct EditText 

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

An EditText allows text input

Implementations§

Source§

impl EditText

Source

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

Create a new EditText (single-line by default)

Source

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

Create a new multi-line EditText

Source

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

Source

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

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

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

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

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§

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