pub struct HorizontalScrollView { /* private fields */ }Expand description
A HorizontalScrollView provides horizontal scrolling capability
Implementations§
Source§impl HorizontalScrollView
impl HorizontalScrollView
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 HorizontalScrollView
Sourcepub fn id(&self) -> i64
pub fn id(&self) -> i64
Get the view ID
Examples found in repository?
examples/horizontal_scroll_demo_v2.rs (line 47)
8fn main() -> Result<()> {
9 println!("=== HorizontalScrollView 水平滚动演示 (新库版本) ===\n");
10
11 // 创建 Activity(全屏模式)
12 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 // 创建主垂直布局
16 let main_layout = activity.create_linear_layout(None)?;
17 main_layout.view().set_margin(&mut activity, 15)?;
18
19 // 创建标题
20 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 // 创建说明
27 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 // ========== 第一行: 水果按钮 ==========
33 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 // 创建第一个 HorizontalScrollView
41 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 // 在 HorizontalScrollView 内创建水平 LinearLayout
47 let h_layout1 = activity.create_linear_layout_horizontal(Some(h_scroll1.id()))?;
48 h_layout1.view().set_height_wrap_content(&mut activity)?;
49
50 // 添加10个水果按钮
51 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)?; // 固定宽度180dp
57 btn.view().set_margin(&mut activity, 5)?;
58 fruit_buttons.push(btn);
59 }
60
61 // ========== 第二行: 数字按钮 ==========
62 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 // 创建第二个 HorizontalScrollView
70 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 // 在 HorizontalScrollView 内创建水平 LinearLayout
76 let h_layout2 = activity.create_linear_layout_horizontal(Some(h_scroll2.id()))?;
77 h_layout2.view().set_height_wrap_content(&mut activity)?;
78
79 // 添加20个数字按钮
80 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)?; // 固定宽度150dp
84 btn.view().set_margin(&mut activity, 5)?;
85 number_buttons.push(btn);
86 }
87
88 // ========== 底部信息 ==========
89 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 // 状态显示
107 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 // 事件循环
122 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 // 检查水果按钮
136 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 // 检查数字按钮
146 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}Sourcepub fn view(&self) -> &View
pub fn view(&self) -> &View
Get the underlying View
Examples found in repository?
examples/horizontal_scroll_demo_v2.rs (line 42)
8fn main() -> Result<()> {
9 println!("=== HorizontalScrollView 水平滚动演示 (新库版本) ===\n");
10
11 // 创建 Activity(全屏模式)
12 let mut activity = Activity::new(false)?;
13 println!("✓ 连接建立\n");
14
15 // 创建主垂直布局
16 let main_layout = activity.create_linear_layout(None)?;
17 main_layout.view().set_margin(&mut activity, 15)?;
18
19 // 创建标题
20 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 // 创建说明
27 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 // ========== 第一行: 水果按钮 ==========
33 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 // 创建第一个 HorizontalScrollView
41 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 // 在 HorizontalScrollView 内创建水平 LinearLayout
47 let h_layout1 = activity.create_linear_layout_horizontal(Some(h_scroll1.id()))?;
48 h_layout1.view().set_height_wrap_content(&mut activity)?;
49
50 // 添加10个水果按钮
51 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)?; // 固定宽度180dp
57 btn.view().set_margin(&mut activity, 5)?;
58 fruit_buttons.push(btn);
59 }
60
61 // ========== 第二行: 数字按钮 ==========
62 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 // 创建第二个 HorizontalScrollView
70 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 // 在 HorizontalScrollView 内创建水平 LinearLayout
76 let h_layout2 = activity.create_linear_layout_horizontal(Some(h_scroll2.id()))?;
77 h_layout2.view().set_height_wrap_content(&mut activity)?;
78
79 // 添加20个数字按钮
80 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)?; // 固定宽度150dp
84 btn.view().set_margin(&mut activity, 5)?;
85 number_buttons.push(btn);
86 }
87
88 // ========== 底部信息 ==========
89 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 // 状态显示
107 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 // 事件循环
122 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 // 检查水果按钮
136 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 // 检查数字按钮
146 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}Auto Trait Implementations§
impl Freeze for HorizontalScrollView
impl RefUnwindSafe for HorizontalScrollView
impl Send for HorizontalScrollView
impl Sync for HorizontalScrollView
impl Unpin for HorizontalScrollView
impl UnwindSafe for HorizontalScrollView
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