|
zronmlcvqy364023068710.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
zronmlcvqy364023068710.gif
2024-9-19 22:12 上傳
( ] M( ~3 t7 _! p1 ~8 N: u點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
4 @8 b! \$ o% Y+ r1
2 o0 W7 r3 |9 ~/ P# }7 x! ePosition layout$ E9 B% J" z( P
在PositionLayout中,子組件通過指定準(zhǔn)確的x/y坐標(biāo)值在屏幕上顯示。(0, 0)為左上角,當(dāng)向下或向右移動(dòng)時(shí),坐標(biāo)值變大;允許組件之間互相重疊。% w+ [2 r. G- m/ o. s, ]
- q: q1 {. }. @9 A8 zPositionLayout示意圖:- K6 X3 J( b0 ~# G1 a: F
/ s0 Z) H0 {+ E, T
jjmurdc4sgg64023068810.png (7.64 KB, 下載次數(shù): 3)
下載附件
保存到相冊(cè)
jjmurdc4sgg64023068810.png
2024-9-19 22:12 上傳
; m& T |6 k! D% v
7 [$ e) }+ @5 r5 a9 [" A7 x& j7 A
PositionLayout以坐標(biāo)的形式控制組件的顯示位置,允許組件相互重疊。: t7 I6 t2 {& m+ Q1 ^7 t
在layout目錄下的XML文件中創(chuàng)建PositionLayout并添加多個(gè)組件,并通過position_x和position_y屬性設(shè)置子組件的坐標(biāo)。# D, H J5 d* Y3 O: d8 }* g
使用PositionLayout的布局效果:
* e5 f9 b% c% y9 Y6 c! }: F s* ^! n) l- F
v24rbsoxq0s64023068910.png (14.65 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
v24rbsoxq0s64023068910.png
2024-9-19 22:12 上傳
1 v" x% v, k3 X
8 p7 Z0 I4 b: Q# }8 n2 y7 ~7 t示例代碼:
) J6 o) O4 w1 N0 F1 Y, q: r$ ~
+ Q$ j6 W! c9 }& Bxmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:id="$+id:position" ohos:height="match_parent" ohos:width="300vp" ohos:background_element="#3387CEFA">
& Q. ?, s; Z" O2 y 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"/>/ R4 U. c: e% P- f8 v
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"/>' r5 S' E( b! n$ z
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"/>
$ x0 \3 ], v- A& e2 u! f. p' g( c) n
設(shè)置子組件的坐標(biāo)時(shí)(position_x和position_y屬性),除了上述示例中的XML方式,還可以在對(duì)應(yīng)的AbilitySlice中通過setPosition(int x, int y)接口設(shè)置,Java示例代碼如下:
2 a8 ^; W/ b. |1 Z' U' U& D
+ Y$ E4 k7 N% N( g4 SText 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);
) t6 c8 w) [5 T2 V* b" k+ w title.setPosition(vp2px(50), vp2px(8)); content1.setPosition(vp2px(8), vp2px(64)); content2.setPosition(vp2px(92), vp2px(188));
- d6 V5 @' N& P* C1 Y) d3 d% O# B) \單位轉(zhuǎn)換的方法如下:
% H8 u0 }# m- z, I& n/ z
9 c$ d; |, D. y8 K" h, |3 iprivate int vp2px(float vp){ return AttrHelper.vp2px(vp,this); }: a" Z7 O; n7 Q$ o! k
對(duì)于超過布局本身大小的組件,超出部分將不顯示。
& V$ _( I2 S" Q* M( M0 KRight組件右側(cè)超出部分將不顯示:
. o, A$ k- C5 l3 v) i# R! n x2 y' j+ a/ \3 y q
3z440cpu4ms64023069010.png (15.97 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
3z440cpu4ms64023069010.png
2024-9-19 22:12 上傳
* @" C2 r. x1 h
+ [; e6 \$ a- _% ]示例代碼:. h. A# m2 _- \/ Y; V
3 s/ r' w2 u4 o% m9 L/ g8 \
...>
" X2 ~: R2 X" ~& M" _5 ]% j( ~* a, [ ...
7 h3 K! p) `6 B0 { b 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"/>' L& q$ e! V( t
2
5 D2 I+ l1 x7 s1 y1 U9 lAdaptiveBox Layout
1 L: S; D, n2 C, N! oAdaptiveBox Layout是自適應(yīng)盒子布局,該布局提供了在不同屏幕尺寸設(shè)備上的自適應(yīng)布局能力,主要用于相同級(jí)別的多個(gè)組件需要在不同屏幕尺寸設(shè)備上自動(dòng)調(diào)整列數(shù)的場(chǎng)景。' m* I: j! Q. r! ^0 |, c
6 {! u* K# b1 s# T Z該布局中的每個(gè)子組件都用一個(gè)單獨(dú)的“盒子”裝起來,子組件設(shè)置的布局參數(shù)都是以盒子作為父布局生效,不以整個(gè)自適應(yīng)布局為生效范圍。
$ e, x+ ^& @ A* C: R7 @+ z2 ^該布局中每個(gè)盒子的寬度固定為布局總寬度除以自適應(yīng)得到的列數(shù),高度為match_content,每一行中的所有盒子按高度最高的進(jìn)行對(duì)齊。3 g/ @( a( K3 _# k- c
該布局水平方向是自動(dòng)分塊,因此水平方向不支持match_content,布局水平寬度僅支持match_parent或固定寬度。
' t! ]8 m4 ]* t/ o自適應(yīng)僅在水平方向進(jìn)行了自動(dòng)分塊,縱向沒有做限制,因此如果某個(gè)子組件的高設(shè)置為match_parent類型,可能導(dǎo)致后續(xù)行無法顯示。
A. O0 j8 j% s! h6 H6 \' U/ FAdaptiveBox Layout示意圖:
]& _+ ^, k8 @) _$ v; `- b7 q( W/ Q8 X' n7 u7 v
1hx23w5pyjr64023069110.jpg (31.84 KB, 下載次數(shù): 5)
下載附件
保存到相冊(cè)
1hx23w5pyjr64023069110.jpg
2024-9-19 22:12 上傳
- O$ i! B" f( I/ V+ ]$ e9 _) G# H8 H7 \5 \ q! \! k. f' Q
AdaptiveBox Layout布局常用方法如下:
5 H2 b/ J) y% i. S7 M7 z! \, n! Y |8 l' C" c
6 O( g4 r2 m2 g. H' c9 b 方法/ e( ?8 S9 l) M& C
|
+ M7 o; Q9 O7 L9 V" O& _2 B7 D 功能
2 H/ d: T, T X5 Q O. \. U) ` |
H/ N- d2 a$ M0 {+ H! Z addAdaptiveRule(int minWidth, int maxWidth, int columns)+ G& b8 j, |( Q8 |: }& M
|
* q. K; e" j1 u" F) C9 R3 E 添加一個(gè)自適應(yīng)盒子布局規(guī)則。
6 @, G5 \ u& @! C$ H |
3 S: |' Q- S! r/ V$ b removeAdaptiveRule(int minWidth, int maxWidth, int columns)8 E H" f& X# M( c
|
& P" |' K) b0 q0 [( Z* G 移除一個(gè)自適應(yīng)盒子布局規(guī)則。
. ^2 O( E6 s' `$ P4 H1 H. l. |" ^ | * C5 R8 B, s! }5 q7 c1 r$ T
clearAdaptiveRules()
$ G0 {# g' Y& O |
2 }8 u& A p! @8 ?5 W 移除所有自適應(yīng)盒子布局規(guī)則。
# `- N0 ?2 y! b: c) |# S |
& r7 \# A7 l) v" o& V Z& O8 h在AdaptiveBox Layout中添加和刪除自適應(yīng)盒子布局規(guī)則的效果對(duì)比如下。6 a {" ~, H! I( y0 R
! k5 e4 c3 E% o- W* Z. C2 n
yure2cnqisn64023069211.gif (368.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
yure2cnqisn64023069211.gif
2024-9-19 22:12 上傳
3 r# L- V1 C6 o a3 Z! r' w
9 K1 ~8 m& w. n: \8 p( |* p; y; MXML布局示例代碼:
4 q$ j6 @% \: W) Y4 s! Q, P' W" {4 ^' g! I5 ?3 ]! X! ^
xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical">
* F; ~% }8 t: C5 o1 b xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="0vp" ohos:width="match_parent" ohos:weight="1" ohos:id="$+id:adaptive_box_layout">0 H0 e0 S+ ]: [6 j# }! X
- X* ~3 D% k) f0 D. r2 K' ~Java關(guān)鍵代碼:
) ^! x( M' Q y1 T3 F9 y! n3 K; G) j
AdaptiveBoxLayout adaptiveBoxLayout = (AdaptiveBoxLayout)findComponentById(ResourceTable.Id_adaptive_box_layout);
8 Q$ K& ^) y; V/ D2 \! K$ yfindComponentById(ResourceTable.Id_add_rule_btn).setClickedListener((component-> { // 添加規(guī)則 adaptiveBoxLayout.addAdaptiveRule(100, 2000, 3); // 更新布局 adaptiveBoxLayout.postLayout();}));+ }0 x8 }4 {- R2 w
findComponentById(ResourceTable.Id_remove_rule_btn).setClickedListener((component-> { // 移除規(guī)則 adaptiveBoxLayout.removeAdaptiveRule(100, 2000, 3); // 更新布局 adaptiveBoxLayout.postLayout();}));
: ?/ Y/ D2 [8 p$ x1 k
: c! ^. u* n' H' E _
d33z4lrsrms64023069311.png (401 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
d33z4lrsrms64023069311.png
2024-9-19 22:12 上傳
9 @7 b7 [6 }9 m' h- V往期推薦HarmonyOS學(xué)習(xí)路之開發(fā)篇—Java UI框架(六大布局開發(fā))
0 [+ C9 G: U! g, s1 s鴻蒙OS制作小游戲:數(shù)字華容道(自定義組件踩坑記錄)
' R" C* C( S' _* g8 f& q7 R; w' c- NHarmonyOS學(xué)習(xí)路之開發(fā)篇—Java UI框架(組件與布局說明)/ ~1 {5 j0 a [0 {9 O3 O& N+ M3 R
HarmonyOS實(shí)戰(zhàn)—服務(wù)卡片初體驗(yàn)
H8 ~: u( u. ]# m2 I4 _6 L! d
; N8 o; Q, q. q' I8 r7 Z% X
01cufbpzfhm64023069411.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
01cufbpzfhm64023069411.jpg
2024-9-19 22:12 上傳
4 \9 p+ k2 X+ Q9 u4 W
ygxfzaoj5ii64023069511.gif (45.46 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
ygxfzaoj5ii64023069511.gif
2024-9-19 22:12 上傳
0 s9 b5 d- A! A2 H5 v- G; p點(diǎn)擊閱讀原文,更精彩~ |
|