horizontal_scroll_demo_v2/
horizontal_scroll_demo_v2.rs1use termux_gui::{Activity, Result};
6use termux_gui::connection::read_message;
7
8fn main() -> Result<()> {
9 println!("=== HorizontalScrollView 水平滚动演示 (新库版本) ===\n");
10
11 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 let main_layout = activity.create_linear_layout(None)?;
17 main_layout.view().set_margin(&mut activity, 15)?;
18
19 let title = activity.create_text_view("↔️ HorizontalScrollView 演示", Some(main_layout.id()))?;
21 title.set_text_size(&mut activity, 26)?;
22 title.view().set_margin(&mut activity, 10)?;
23 title.view().set_height_wrap_content(&mut activity)?;
24 title.view().set_linear_layout_params(&mut activity, 0, None)?;
25
26 let desc = activity.create_text_view("左右滑动查看更多按钮", Some(main_layout.id()))?;
28 desc.view().set_margin(&mut activity, 5)?;
29 desc.view().set_height_wrap_content(&mut activity)?;
30 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
31
32 let section1 = activity.create_text_view("第一行: 水果按钮(左右滑动)", Some(main_layout.id()))?;
34 section1.set_text_size(&mut activity, 18)?;
35 section1.view().set_margin(&mut activity, 10)?;
36 section1.view().set_height_wrap_content(&mut activity)?;
37 section1.view().set_linear_layout_params(&mut activity, 0, None)?;
38 section1.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
39
40 let h_scroll1 = activity.create_horizontal_scroll_view(Some(main_layout.id()))?;
42 h_scroll1.view().set_margin(&mut activity, 10)?;
43 h_scroll1.view().set_height_wrap_content(&mut activity)?;
44 h_scroll1.view().set_linear_layout_params(&mut activity, 0, None)?;
45
46 let h_layout1 = activity.create_linear_layout_horizontal(Some(h_scroll1.id()))?;
48 h_layout1.view().set_height_wrap_content(&mut activity)?;
49
50 let fruits = ["🍎 苹果", "🍊 橙子", "🍌 香蕉", "🍇 葡萄", "🍓 草莓",
52 "🍑 桃子", "🍒 樱桃", "🍍 菠萝", "🥝 猕猴桃", "🥭 芒果"];
53 let mut fruit_buttons = Vec::new();
54 for fruit in &fruits {
55 let btn = activity.create_button(fruit, Some(h_layout1.id()))?;
56 btn.view().set_width(&mut activity, 180)?; btn.view().set_margin(&mut activity, 5)?;
58 fruit_buttons.push(btn);
59 }
60
61 let section2 = activity.create_text_view("第二行: 数字按钮(左右滑动)", Some(main_layout.id()))?;
63 section2.set_text_size(&mut activity, 18)?;
64 section2.view().set_margin(&mut activity, 10)?;
65 section2.view().set_height_wrap_content(&mut activity)?;
66 section2.view().set_linear_layout_params(&mut activity, 0, None)?;
67 section2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
68
69 let h_scroll2 = activity.create_horizontal_scroll_view(Some(main_layout.id()))?;
71 h_scroll2.view().set_margin(&mut activity, 10)?;
72 h_scroll2.view().set_height_wrap_content(&mut activity)?;
73 h_scroll2.view().set_linear_layout_params(&mut activity, 0, None)?;
74
75 let h_layout2 = activity.create_linear_layout_horizontal(Some(h_scroll2.id()))?;
77 h_layout2.view().set_height_wrap_content(&mut activity)?;
78
79 let mut number_buttons = Vec::new();
81 for i in 0..20 {
82 let btn = activity.create_button(&format!("数字 {}", i * 5), Some(h_layout2.id()))?;
83 btn.view().set_width(&mut activity, 150)?; btn.view().set_margin(&mut activity, 5)?;
85 number_buttons.push(btn);
86 }
87
88 let divider = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(main_layout.id()))?;
90 divider.view().set_margin(&mut activity, 10)?;
91 divider.view().set_height_wrap_content(&mut activity)?;
92 divider.view().set_linear_layout_params(&mut activity, 0, None)?;
93
94 let info = activity.create_text_view(
95 "💡 提示:\n\
96 • 在每一行中左右滑动\n\
97 • 点击任意按钮查看效果\n\
98 • HorizontalScrollView 支持水平滚动",
99 Some(main_layout.id())
100 )?;
101 info.view().set_margin(&mut activity, 10)?;
102 info.view().set_height_wrap_content(&mut activity)?;
103 info.view().set_linear_layout_params(&mut activity, 0, None)?;
104 info.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
105
106 let status = activity.create_text_view("准备就绪 - 尝试左右滑动", Some(main_layout.id()))?;
108 status.view().set_margin(&mut activity, 10)?;
109 status.view().set_height_wrap_content(&mut activity)?;
110 status.view().set_linear_layout_params(&mut activity, 0, None)?;
111 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
112
113 println!("✓ 界面创建完成\n");
114 println!("━━━━━━━━━━━━━━━━━━━━━━");
115 println!("提示:");
116 println!(" • 第一行: 10个水果按钮");
117 println!(" • 第二行: 20个数字按钮");
118 println!(" • 左右滑动查看更多内容");
119 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
120
121 loop {
123 let event = read_message(activity.event_stream())?;
124 let event_type = event["type"].as_str().unwrap_or("");
125 let event_value = &event["value"];
126
127 match event_type {
128 "destroy" => {
129 println!("\n✓ Activity 已关闭");
130 return Ok(());
131 },
132 "click" => {
133 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
134
135 for (i, btn) in fruit_buttons.iter().enumerate() {
137 if clicked_id == btn.id() {
138 println!("✅ 选择: {}", fruits[i]);
139 status.set_text(&mut activity, &format!("✅ 选择: {}", fruits[i]))?;
140 status.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
141 break;
142 }
143 }
144
145 for (i, btn) in number_buttons.iter().enumerate() {
147 if clicked_id == btn.id() {
148 let value = i * 5;
149 println!("🔢 选择数字: {}", value);
150 status.set_text(&mut activity, &format!("🔢 选择数字: {}", value))?;
151 status.set_text_color(&mut activity, 0xFFFF9800u32 as i32)?;
152 break;
153 }
154 }
155 },
156 _ => {}
157 }
158 }
159}