pub struct FrameLayout { /* private fields */ }Expand description
A FrameLayout is a simple layout that stacks children on top of each other
Implementations§
Source§impl FrameLayout
impl FrameLayout
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 FrameLayout
Children are drawn in the order they are added, with the last child on top. FrameLayout is useful for overlaying views or creating simple stacked layouts.
Sourcepub fn id(&self) -> i64
pub fn id(&self) -> i64
Get the view ID
Examples found in repository?
examples/frame_layout_demo_v2.rs (line 48)
8fn main() -> Result<()> {
9 println!("=== FrameLayout 帧布局演示 (新库版本) ===\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("🎭 FrameLayout 演示", Some(layout.id()))?;
20 title.set_text_size(&mut activity, 26)?;
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 desc = activity.create_text_view("FrameLayout 按添加顺序层叠显示子视图", Some(layout.id()))?;
27 desc.view().set_margin(&mut activity, 5)?;
28 desc.view().set_height_wrap_content(&mut activity)?;
29 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // ========== 示例1: 简单层叠 ==========
32 let section1 = activity.create_text_view("示例1: 文本层叠", Some(layout.id()))?;
33 section1.set_text_size(&mut activity, 18)?;
34 section1.view().set_margin(&mut activity, 10)?;
35 section1.view().set_height_wrap_content(&mut activity)?;
36 section1.view().set_linear_layout_params(&mut activity, 0, None)?;
37 section1.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
38
39 // 创建一个 FrameLayout
40 let frame1 = activity.create_frame_layout(Some(layout.id()))?;
41 frame1.view().set_margin(&mut activity, 10)?;
42 frame1.view().set_height(&mut activity, 150)?;
43 frame1.view().set_width_match_parent(&mut activity)?;
44 frame1.view().set_linear_layout_params(&mut activity, 0, None)?;
45
46 // 在 FrameLayout 中添加三个层叠的 TextView
47 // 第一层(底层)
48 let layer1 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━\n第一层(底层)", Some(frame1.id()))?;
49 layer1.set_text_size(&mut activity, 20)?;
50 layer1.view().set_margin(&mut activity, 5)?;
51 layer1.set_text_color(&mut activity, 0xFFFF5722u32 as i32)?;
52
53 // 第二层(中层)- 稍微偏移
54 let layer2 = activity.create_text_view("\n\n 第二层(中层)", Some(frame1.id()))?;
55 layer2.set_text_size(&mut activity, 20)?;
56 layer2.view().set_margin(&mut activity, 5)?;
57 layer2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
58
59 // 第三层(顶层)- 更多偏移
60 let layer3 = activity.create_text_view("\n\n\n\n 第三层(顶层)", Some(frame1.id()))?;
61 layer3.set_text_size(&mut activity, 20)?;
62 layer3.view().set_margin(&mut activity, 5)?;
63 layer3.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
64
65 // ========== 示例2: 按钮叠加 ==========
66 let divider1 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
67 divider1.view().set_margin(&mut activity, 10)?;
68 divider1.view().set_height_wrap_content(&mut activity)?;
69 divider1.view().set_linear_layout_params(&mut activity, 0, None)?;
70
71 let section2 = activity.create_text_view("示例2: 按钮居中叠加", Some(layout.id()))?;
72 section2.set_text_size(&mut activity, 18)?;
73 section2.view().set_margin(&mut activity, 10)?;
74 section2.view().set_height_wrap_content(&mut activity)?;
75 section2.view().set_linear_layout_params(&mut activity, 0, None)?;
76 section2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
77
78 // 创建第二个 FrameLayout
79 let frame2 = activity.create_frame_layout(Some(layout.id()))?;
80 frame2.view().set_margin(&mut activity, 10)?;
81 frame2.view().set_height(&mut activity, 200)?;
82 frame2.view().set_width_match_parent(&mut activity)?;
83 frame2.view().set_linear_layout_params(&mut activity, 0, None)?;
84
85 // 背景文本
86 let bg_text = activity.create_text_view("这是背景文本\n\n下面有一个居中的按钮\n\n点击试试", Some(frame2.id()))?;
87 bg_text.set_text_size(&mut activity, 16)?;
88 bg_text.view().set_margin(&mut activity, 10)?;
89 bg_text.set_text_color(&mut activity, 0xFF999999u32 as i32)?;
90
91 // 居中按钮(通过在 FrameLayout 中居中)
92 // 注意:FrameLayout 默认将子视图居中对齐
93 let center_btn = activity.create_button("点我!", Some(frame2.id()))?;
94 center_btn.view().set_margin(&mut activity, 80)?; // 添加边距让按钮看起来居中
95
96 // ========== 底部信息 ==========
97 let divider2 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
98 divider2.view().set_margin(&mut activity, 10)?;
99 divider2.view().set_height_wrap_content(&mut activity)?;
100 divider2.view().set_linear_layout_params(&mut activity, 0, None)?;
101
102 let info = activity.create_text_view(
103 "💡 FrameLayout 特点:\n\
104 • 子视图按添加顺序层叠\n\
105 • 后添加的视图在上层\n\
106 • 适合创建叠加效果\n\
107 • 可以实现简单的 Z 轴布局",
108 Some(layout.id())
109 )?;
110 info.view().set_margin(&mut activity, 10)?;
111 info.view().set_height_wrap_content(&mut activity)?;
112 info.view().set_linear_layout_params(&mut activity, 0, None)?;
113 info.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
114
115 // 状态显示
116 let status = activity.create_text_view("准备就绪", Some(layout.id()))?;
117 status.view().set_margin(&mut activity, 10)?;
118 status.view().set_height_wrap_content(&mut activity)?;
119 status.view().set_linear_layout_params(&mut activity, 0, None)?;
120 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
121
122 println!("✓ 界面创建完成\n");
123 println!("━━━━━━━━━━━━━━━━━━━━━━");
124 println!("提示:");
125 println!(" • 观察三层文本的层叠效果");
126 println!(" • 点击示例2中的居中按钮");
127 println!(" • FrameLayout 中后添加的元素在上层");
128 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
129
130 let mut click_count = 0;
131
132 // 事件循环
133 loop {
134 let event = read_message(activity.event_stream())?;
135 let event_type = event["type"].as_str().unwrap_or("");
136 let event_value = &event["value"];
137
138 match event_type {
139 "destroy" => {
140 // Activity 已被系统销毁,直接退出即可
141 println!("\n✓ Activity 已关闭");
142 return Ok(());
143 },
144 "click" => {
145 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
146
147 if clicked_id == center_btn.id() {
148 click_count += 1;
149 println!("✅ 居中按钮被点击!(第{}次)", click_count);
150
151 let messages = [
152 "✅ 第一次点击!很好!",
153 "👍 第二次点击!继续!",
154 "🎉 第三次点击!太棒了!",
155 "🌟 第四次点击!你很厉害!",
156 "🏆 第五次点击!大师级别!",
157 ];
158
159 let msg = if click_count <= 5 {
160 messages[click_count - 1]
161 } else {
162 "🎊 你已经是专家了!"
163 };
164
165 status.set_text(&mut activity, &format!("{} (点击{}次)", msg, click_count))?;
166
167 // 根据点击次数改变颜色
168 let color = match click_count % 5 {
169 1 => 0xFF4CAF50u32 as i32, // 绿色
170 2 => 0xFF2196F3u32 as i32, // 蓝色
171 3 => 0xFFFF9800u32 as i32, // 橙色
172 4 => 0xFF9C27B0u32 as i32, // 紫色
173 _ => 0xFFF44336u32 as i32, // 红色
174 };
175 status.set_text_color(&mut activity, color)?;
176 }
177 },
178 _ => {}
179 }
180 }
181}Sourcepub fn view(&self) -> &View
pub fn view(&self) -> &View
Get the underlying View
Examples found in repository?
examples/frame_layout_demo_v2.rs (line 41)
8fn main() -> Result<()> {
9 println!("=== FrameLayout 帧布局演示 (新库版本) ===\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("🎭 FrameLayout 演示", Some(layout.id()))?;
20 title.set_text_size(&mut activity, 26)?;
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 desc = activity.create_text_view("FrameLayout 按添加顺序层叠显示子视图", Some(layout.id()))?;
27 desc.view().set_margin(&mut activity, 5)?;
28 desc.view().set_height_wrap_content(&mut activity)?;
29 desc.view().set_linear_layout_params(&mut activity, 0, None)?;
30
31 // ========== 示例1: 简单层叠 ==========
32 let section1 = activity.create_text_view("示例1: 文本层叠", Some(layout.id()))?;
33 section1.set_text_size(&mut activity, 18)?;
34 section1.view().set_margin(&mut activity, 10)?;
35 section1.view().set_height_wrap_content(&mut activity)?;
36 section1.view().set_linear_layout_params(&mut activity, 0, None)?;
37 section1.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
38
39 // 创建一个 FrameLayout
40 let frame1 = activity.create_frame_layout(Some(layout.id()))?;
41 frame1.view().set_margin(&mut activity, 10)?;
42 frame1.view().set_height(&mut activity, 150)?;
43 frame1.view().set_width_match_parent(&mut activity)?;
44 frame1.view().set_linear_layout_params(&mut activity, 0, None)?;
45
46 // 在 FrameLayout 中添加三个层叠的 TextView
47 // 第一层(底层)
48 let layer1 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━\n第一层(底层)", Some(frame1.id()))?;
49 layer1.set_text_size(&mut activity, 20)?;
50 layer1.view().set_margin(&mut activity, 5)?;
51 layer1.set_text_color(&mut activity, 0xFFFF5722u32 as i32)?;
52
53 // 第二层(中层)- 稍微偏移
54 let layer2 = activity.create_text_view("\n\n 第二层(中层)", Some(frame1.id()))?;
55 layer2.set_text_size(&mut activity, 20)?;
56 layer2.view().set_margin(&mut activity, 5)?;
57 layer2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
58
59 // 第三层(顶层)- 更多偏移
60 let layer3 = activity.create_text_view("\n\n\n\n 第三层(顶层)", Some(frame1.id()))?;
61 layer3.set_text_size(&mut activity, 20)?;
62 layer3.view().set_margin(&mut activity, 5)?;
63 layer3.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
64
65 // ========== 示例2: 按钮叠加 ==========
66 let divider1 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
67 divider1.view().set_margin(&mut activity, 10)?;
68 divider1.view().set_height_wrap_content(&mut activity)?;
69 divider1.view().set_linear_layout_params(&mut activity, 0, None)?;
70
71 let section2 = activity.create_text_view("示例2: 按钮居中叠加", Some(layout.id()))?;
72 section2.set_text_size(&mut activity, 18)?;
73 section2.view().set_margin(&mut activity, 10)?;
74 section2.view().set_height_wrap_content(&mut activity)?;
75 section2.view().set_linear_layout_params(&mut activity, 0, None)?;
76 section2.set_text_color(&mut activity, 0xFF4CAF50u32 as i32)?;
77
78 // 创建第二个 FrameLayout
79 let frame2 = activity.create_frame_layout(Some(layout.id()))?;
80 frame2.view().set_margin(&mut activity, 10)?;
81 frame2.view().set_height(&mut activity, 200)?;
82 frame2.view().set_width_match_parent(&mut activity)?;
83 frame2.view().set_linear_layout_params(&mut activity, 0, None)?;
84
85 // 背景文本
86 let bg_text = activity.create_text_view("这是背景文本\n\n下面有一个居中的按钮\n\n点击试试", Some(frame2.id()))?;
87 bg_text.set_text_size(&mut activity, 16)?;
88 bg_text.view().set_margin(&mut activity, 10)?;
89 bg_text.set_text_color(&mut activity, 0xFF999999u32 as i32)?;
90
91 // 居中按钮(通过在 FrameLayout 中居中)
92 // 注意:FrameLayout 默认将子视图居中对齐
93 let center_btn = activity.create_button("点我!", Some(frame2.id()))?;
94 center_btn.view().set_margin(&mut activity, 80)?; // 添加边距让按钮看起来居中
95
96 // ========== 底部信息 ==========
97 let divider2 = activity.create_text_view("━━━━━━━━━━━━━━━━━━━━", Some(layout.id()))?;
98 divider2.view().set_margin(&mut activity, 10)?;
99 divider2.view().set_height_wrap_content(&mut activity)?;
100 divider2.view().set_linear_layout_params(&mut activity, 0, None)?;
101
102 let info = activity.create_text_view(
103 "💡 FrameLayout 特点:\n\
104 • 子视图按添加顺序层叠\n\
105 • 后添加的视图在上层\n\
106 • 适合创建叠加效果\n\
107 • 可以实现简单的 Z 轴布局",
108 Some(layout.id())
109 )?;
110 info.view().set_margin(&mut activity, 10)?;
111 info.view().set_height_wrap_content(&mut activity)?;
112 info.view().set_linear_layout_params(&mut activity, 0, None)?;
113 info.set_text_color(&mut activity, 0xFF666666u32 as i32)?;
114
115 // 状态显示
116 let status = activity.create_text_view("准备就绪", Some(layout.id()))?;
117 status.view().set_margin(&mut activity, 10)?;
118 status.view().set_height_wrap_content(&mut activity)?;
119 status.view().set_linear_layout_params(&mut activity, 0, None)?;
120 status.set_text_color(&mut activity, 0xFF2196F3u32 as i32)?;
121
122 println!("✓ 界面创建完成\n");
123 println!("━━━━━━━━━━━━━━━━━━━━━━");
124 println!("提示:");
125 println!(" • 观察三层文本的层叠效果");
126 println!(" • 点击示例2中的居中按钮");
127 println!(" • FrameLayout 中后添加的元素在上层");
128 println!("━━━━━━━━━━━━━━━━━━━━━━\n");
129
130 let mut click_count = 0;
131
132 // 事件循环
133 loop {
134 let event = read_message(activity.event_stream())?;
135 let event_type = event["type"].as_str().unwrap_or("");
136 let event_value = &event["value"];
137
138 match event_type {
139 "destroy" => {
140 // Activity 已被系统销毁,直接退出即可
141 println!("\n✓ Activity 已关闭");
142 return Ok(());
143 },
144 "click" => {
145 let clicked_id = event_value["id"].as_i64().unwrap_or(-1);
146
147 if clicked_id == center_btn.id() {
148 click_count += 1;
149 println!("✅ 居中按钮被点击!(第{}次)", click_count);
150
151 let messages = [
152 "✅ 第一次点击!很好!",
153 "👍 第二次点击!继续!",
154 "🎉 第三次点击!太棒了!",
155 "🌟 第四次点击!你很厉害!",
156 "🏆 第五次点击!大师级别!",
157 ];
158
159 let msg = if click_count <= 5 {
160 messages[click_count - 1]
161 } else {
162 "🎊 你已经是专家了!"
163 };
164
165 status.set_text(&mut activity, &format!("{} (点击{}次)", msg, click_count))?;
166
167 // 根据点击次数改变颜色
168 let color = match click_count % 5 {
169 1 => 0xFF4CAF50u32 as i32, // 绿色
170 2 => 0xFF2196F3u32 as i32, // 蓝色
171 3 => 0xFFFF9800u32 as i32, // 橙色
172 4 => 0xFF9C27B0u32 as i32, // 紫色
173 _ => 0xFFF44336u32 as i32, // 红色
174 };
175 status.set_text_color(&mut activity, color)?;
176 }
177 },
178 _ => {}
179 }
180 }
181}Auto Trait Implementations§
impl Freeze for FrameLayout
impl RefUnwindSafe for FrameLayout
impl Send for FrameLayout
impl Sync for FrameLayout
impl Unpin for FrameLayout
impl UnwindSafe for FrameLayout
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