|
55x43q2r2n264025004522.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
55x43q2r2n264025004522.gif
2024-9-12 09:50 上傳
, B0 T" \2 G8 b4 u" ]) h& z點(diǎn)擊上方藍(lán)色字體,關(guān)注我們- {, U) v) `- x. B2 [
1
) ]5 z: C9 U% D# Z) D4 \) yPosition layout( T* m$ _ a) n. a3 A+ _ u+ o
在PositionLayout中,子組件通過(guò)指定準(zhǔn)確的x/y坐標(biāo)值在屏幕上顯示。(0, 0)為左上角,當(dāng)向下或向右移動(dòng)時(shí),坐標(biāo)值變大;允許組件之間互相重疊。
- D3 s! p6 O; m0 A2 ], I* A7 i2 w8 [ s% [% {3 w% Z5 T
PositionLayout示意圖:8 w6 W: {- D5 Z r2 ~/ i1 R
% j3 z K* p# C$ v% x" W% B
tzm5juwnrwf64025004623.png (7.64 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
tzm5juwnrwf64025004623.png
2024-9-12 09:50 上傳
* V1 R6 P8 S: O
1 ~- s0 s/ }5 V/ TPositionLayout以坐標(biāo)的形式控制組件的顯示位置,允許組件相互重疊。
: h. y! c9 \1 X. Y4 ^在layout目錄下的XML文件中創(chuàng)建PositionLayout并添加多個(gè)組件,并通過(guò)position_x和position_y屬性設(shè)置子組件的坐標(biāo)。8 X/ {, k* m: s( v
使用PositionLayout的布局效果:; J! y& d4 Q% `( U& t X( v
2 o) w4 q$ n' D9 Z
u32hjovx5wb64025004723.png (14.65 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
u32hjovx5wb64025004723.png
2024-9-12 09:50 上傳
4 a$ e5 J0 `# ?* I% [7 V a7 B; n; w% A N0 K7 z4 }( ?
示例代碼:
. R, ?9 Z1 }0 J+ }% g( N5 Q/ H# g9 E0 j8 m O" H
xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:id="$+id:position" ohos:height="match_parent" ohos:width="300vp" ohos:background_element="#3387CEFA">
0 J. m; U6 v- h' o" G4 V5 X ohos:id="$+id:position_text_1" ohos:height="50vp" ohos:width="200vp" ohos:background_element="#9987CEFA" ohos:position_x="50vp" ohos:position_y="8vp" ohos:text="Title" ohos:text_alignment="center" ohos:text_size="20fp"/>6 M- W/ V0 \- J8 B0 i. K
ohos:id="$+id:position_text_2" ohos:height="200vp" ohos:width="200vp" ohos:background_element="#9987CEFA" ohos:position_x="8vp" ohos:position_y="64vp" ohos:text="Content" ohos:text_alignment="center" ohos:text_size="20fp"/>7 R5 Z6 T: S* J& u
ohos:id="$+id:position_text_3" ohos:height="200vp" ohos:width="200vp" ohos:background_element="#9987CEFA" ohos:position_x="92vp" ohos:position_y="188vp" ohos:text="Content" ohos:text_alignment="center" ohos:text_size="20fp"/>
6 K& N4 Z# x5 x) X$ Y% F
* t8 ]1 H. A6 C) O; H1 h& c設(shè)置子組件的坐標(biāo)時(shí)(position_x和position_y屬性),除了上述示例中的XML方式,還可以在對(duì)應(yīng)的AbilitySlice中通過(guò)setPosition(int x, int y)接口設(shè)置,Java示例代碼如下:0 G' s9 S8 y: @" i0 Q! w' [
; ]# J3 e6 n% f: A# y+ F2 T
Text title = (Text)findComponentById(ResourceTable.Id_position_text_1); Text content1 = (Text)findComponentById(ResourceTable.Id_position_text_2); Text content2 = (Text)findComponentById(ResourceTable.Id_position_text_3);
0 v$ G5 n' c. k f title.setPosition(vp2px(50), vp2px(8)); content1.setPosition(vp2px(8), vp2px(64)); content2.setPosition(vp2px(92), vp2px(188));
( n( \$ i; R) I) ~& b單位轉(zhuǎn)換的方法如下:7 G, v# p' d$ _8 }0 ?; U
8 c, {( L# Y! f( j$ [private int vp2px(float vp){ return AttrHelper.vp2px(vp,this); }
+ s6 `4 |, r- p2 A對(duì)于超過(guò)布局本身大小的組件,超出部分將不顯示。0 U, u6 X5 |% C& h8 `
Right組件右側(cè)超出部分將不顯示:8 ]5 |8 Q6 {7 Y7 h
) \* {; o5 ^5 D; r! X
5wt5a2bf5zu64025004823.png (15.97 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
5wt5a2bf5zu64025004823.png
2024-9-12 09:50 上傳
% E9 P. A/ h: N2 `/ Z; D
7 e. g2 R$ z/ N* a
示例代碼:* K. x4 O% G* D. w! w$ _+ W9 @
% z0 j* I* g8 ~$ X% w...>6 q, _( Z8 I; o5 V( h
...
, H; m- t( p' w/ ^/ n& D' n/ t, l ohos:id="$+id:position_text_4" ohos:height="120vp" ohos:width="120vp" ohos:background_element="#9987CEFA" ohos:position_x="212vp" ohos:position_y="64vp" ohos:text="Right" ohos:text_alignment="center" ohos:text_size="20fp"/>1 p0 Q5 S1 k1 U/ t4 E
2
. J; }- K& j2 ~; _, @) DAdaptiveBox Layout5 s/ Y8 f* K/ R7 H: ?9 Z) h
AdaptiveBox Layout是自適應(yīng)盒子布局,該布局提供了在不同屏幕尺寸設(shè)備上的自適應(yīng)布局能力,主要用于相同級(jí)別的多個(gè)組件需要在不同屏幕尺寸設(shè)備上自動(dòng)調(diào)整列數(shù)的場(chǎng)景。9 L0 G! M+ d |* ?# Y0 A7 ?' O+ [
8 { |" H# Y4 l該布局中的每個(gè)子組件都用一個(gè)單獨(dú)的“盒子”裝起來(lái),子組件設(shè)置的布局參數(shù)都是以盒子作為父布局生效,不以整個(gè)自適應(yīng)布局為生效范圍。
: \% u( z& k) w' R該布局中每個(gè)盒子的寬度固定為布局總寬度除以自適應(yīng)得到的列數(shù),高度為match_content,每一行中的所有盒子按高度最高的進(jìn)行對(duì)齊。- ]) M8 g0 v* e% a3 B
該布局水平方向是自動(dòng)分塊,因此水平方向不支持match_content,布局水平寬度僅支持match_parent或固定寬度。% c' o4 D" g( S' t4 U! g
自適應(yīng)僅在水平方向進(jìn)行了自動(dòng)分塊,縱向沒(méi)有做限制,因此如果某個(gè)子組件的高設(shè)置為match_parent類型,可能導(dǎo)致后續(xù)行無(wú)法顯示。3 P+ ?; P5 n4 V# l7 o8 z: t; S
AdaptiveBox Layout示意圖:
! m1 ]3 V* v& O' W' \( c7 L' D( \
xnv2pkvrqyl64025004923.jpg (31.84 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
xnv2pkvrqyl64025004923.jpg
2024-9-12 09:50 上傳
5 R1 A4 a3 w1 K4 c, B# x# ` x/ G z$ l0 }
AdaptiveBox Layout布局常用方法如下:
. M. m' M5 e2 [' e$ k5 i3 y" a7 z/ T$ |
% s* L, v% k+ v$ w
方法' }+ r4 K$ E% S) A# {
| 0 C$ N5 n4 D" Q' ^) ~' b ]* c
功能
4 q5 H' X4 n- f. r; Y | ( q: R+ @; Y3 T9 s0 T
addAdaptiveRule(int minWidth, int maxWidth, int columns)
" `# @) w+ h+ v& x( Q, [+ n1 L( C | $ Z9 x4 m8 g7 n, _: O# V
添加一個(gè)自適應(yīng)盒子布局規(guī)則。) O+ b( K1 B$ R" _4 r
|
0 Z6 f, n9 Q. E1 O1 n# d removeAdaptiveRule(int minWidth, int maxWidth, int columns)
( w3 n9 n: M3 ]# F# l | * s- S: l2 ?' u7 p0 O( ~3 M
移除一個(gè)自適應(yīng)盒子布局規(guī)則。
/ w/ F8 S' N/ p7 {6 m7 N% g: u, r |
* V0 _, v3 d: w9 N: j clearAdaptiveRules()) }4 N8 z) V6 G7 p$ `, `9 y
|
3 \/ b m; ?; X$ R 移除所有自適應(yīng)盒子布局規(guī)則。
$ `0 C9 G: D* r |
$ ]( Y& r8 ? Y9 {5 s在AdaptiveBox Layout中添加和刪除自適應(yīng)盒子布局規(guī)則的效果對(duì)比如下。& P$ c+ w7 X, |0 h9 v0 i8 N( p7 l
% p J0 J0 O, @; @: G- {+ H
jx2uvwdbmmk64025005023.gif (368.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
jx2uvwdbmmk64025005023.gif
2024-9-12 09:50 上傳
0 b% F% \* W0 C, c7 u$ ?6 R5 i3 z9 W& M4 K+ @6 ^) J6 e
XML布局示例代碼:5 V: S: R8 R6 w R6 Q8 J4 N0 ]
/ @0 Q* W% e7 ?5 m1 G! I2 I
xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical">; u( j( m3 |2 `, `3 h* m
xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="0vp" ohos:width="match_parent" ohos:weight="1" ohos:id="$+id:adaptive_box_layout">; u" L4 ~8 @8 Y
9 U# T# m' d8 W4 J# ]& o- X! OJava關(guān)鍵代碼:
# f7 v L# m1 K% \" c& G- [5 x0 e+ u, A# @3 u) x1 x
AdaptiveBoxLayout adaptiveBoxLayout = (AdaptiveBoxLayout)findComponentById(ResourceTable.Id_adaptive_box_layout);" W0 `. N" Z0 n, g+ t# s: d
findComponentById(ResourceTable.Id_add_rule_btn).setClickedListener((component-> { // 添加規(guī)則 adaptiveBoxLayout.addAdaptiveRule(100, 2000, 3); // 更新布局 adaptiveBoxLayout.postLayout();}));8 t Z/ y8 Q+ v! G2 T j+ p: ?# P
findComponentById(ResourceTable.Id_remove_rule_btn).setClickedListener((component-> { // 移除規(guī)則 adaptiveBoxLayout.removeAdaptiveRule(100, 2000, 3); // 更新布局 adaptiveBoxLayout.postLayout();}));
1 R- N H. n H# _5 \+ @2 L9 x* v, x' v% H0 s8 n
rhlwxlshew064025005123.png (401 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
rhlwxlshew064025005123.png
2024-9-12 09:50 上傳
& u/ v* b( a! k
往期推薦HarmonyOS學(xué)習(xí)路之開(kāi)發(fā)篇—Java UI框架(六大布局開(kāi)發(fā))
6 c: f p; S, n鴻蒙OS制作小游戲:數(shù)字華容道(自定義組件踩坑記錄)6 O" @. U7 h7 h3 \& Z! W9 ]! n5 g
HarmonyOS學(xué)習(xí)路之開(kāi)發(fā)篇—Java UI框架(組件與布局說(shuō)明)
3 R( R( x! `6 X& THarmonyOS實(shí)戰(zhàn)—服務(wù)卡片初體驗(yàn)
9 o4 ^; n! {) f$ i
$ w9 l& d; `, r% ], |
dwg35acdv1w64025005223.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
dwg35acdv1w64025005223.jpg
2024-9-12 09:50 上傳
6 @+ o1 | r8 h4 a% P5 Q' z
tfhv4o31dhr64025005323.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
tfhv4o31dhr64025005323.gif
2024-9-12 09:50 上傳
, ~. W) r v5 o
點(diǎn)擊閱讀原文,更精彩~ |
|