|
ed1sbthqlxz64015941322.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
ed1sbthqlxz64015941322.gif
2024-9-10 09:42 上傳
; p" k9 p- J5 v' X8 Y+ W( e) k( v4 p點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
1 A. i4 j% V9 X4 ~9 ]1$ f. N8 b* j# f3 Y
Position layout
+ X5 N8 N: ~3 j7 n, q; x @% W在PositionLayout中,子組件通過(guò)指定準(zhǔn)確的x/y坐標(biāo)值在屏幕上顯示。(0, 0)為左上角,當(dāng)向下或向右移動(dòng)時(shí),坐標(biāo)值變大;允許組件之間互相重疊。
7 [2 Y+ Z: V' d7 Z' `: B+ J' B( j9 Y8 a) _% L/ ^. F
PositionLayout示意圖:
! A3 c$ o+ |) ?$ G- N3 n
# s: i* M1 ^. t: m3 q
ypal4damvy264015941422.png (7.64 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
ypal4damvy264015941422.png
2024-9-10 09:42 上傳
! P" V s8 z) F& C3 {
9 m6 `" [6 ^6 XPositionLayout以坐標(biāo)的形式控制組件的顯示位置,允許組件相互重疊。( S6 p1 C# C1 E/ |
在layout目錄下的XML文件中創(chuàng)建PositionLayout并添加多個(gè)組件,并通過(guò)position_x和position_y屬性設(shè)置子組件的坐標(biāo)。
; k# w& _4 \- n, P4 ]使用PositionLayout的布局效果:
; Y. ?6 ]% Q+ h3 x' o4 w5 z7 O0 D6 S! k1 c
izlyg4x5nca64015941522.png (14.65 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
izlyg4x5nca64015941522.png
2024-9-10 09:42 上傳
- p) r' \* w: S* L4 q& m: {
: Z# Y5 i0 n. \
示例代碼: x, x- ?* P( h' q; S$ ]
0 b4 n# C% i2 R3 K- o) G
xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:id="$+id:position" ohos:height="match_parent" ohos:width="300vp" ohos:background_element="#3387CEFA">3 u! G/ G" U; L1 ~% z
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"/>- U+ O' _! O7 [3 I4 t
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"/>
# m' U0 h P+ y+ }0 r d 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"/>8 L0 C0 L# \6 W9 K! W4 u$ ^8 C9 U
& V$ x* B( o! p2 X6 r8 @" p7 v/ m設(shè)置子組件的坐標(biāo)時(shí)(position_x和position_y屬性),除了上述示例中的XML方式,還可以在對(duì)應(yīng)的AbilitySlice中通過(guò)setPosition(int x, int y)接口設(shè)置,Java示例代碼如下:
7 J& r+ h/ p2 E+ M! P, N
. f9 h+ u) N/ ~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);
, T; j+ y7 L# m0 Y title.setPosition(vp2px(50), vp2px(8)); content1.setPosition(vp2px(8), vp2px(64)); content2.setPosition(vp2px(92), vp2px(188));
9 w& t6 }# P, m9 ?* G' B) B單位轉(zhuǎn)換的方法如下:: H, F$ S4 v" o# x9 C( [0 Y8 Q' z
( m/ q0 g7 q6 c
private int vp2px(float vp){ return AttrHelper.vp2px(vp,this); }
, t0 K7 s* l, O% B& y. ?3 Z對(duì)于超過(guò)布局本身大小的組件,超出部分將不顯示。
! a0 V% c. {. l* [1 cRight組件右側(cè)超出部分將不顯示:
0 d% O0 ~. d* g0 q8 T: N3 `) h8 H+ t9 S* F% _5 L8 F+ y8 R
5q0uipgulxb64015941623.png (15.97 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
5q0uipgulxb64015941623.png
2024-9-10 09:42 上傳
' E. s; A3 }1 N! T- n( z' V5 {2 X7 Y: }/ D. T( G
示例代碼:' o" I( B) d' i+ r0 A
1 o4 }4 \' M! s: y" h
...>
9 J3 f- D {( R( u' t ...3 o+ }$ b: B* c, P: s) ?( s
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"/># R9 _% b% _6 ?( e; o
2
% x( n- x! B8 ~( x( }2 V3 @& Q' VAdaptiveBox Layout
/ [4 ]* g. T+ ^ SAdaptiveBox Layout是自適應(yīng)盒子布局,該布局提供了在不同屏幕尺寸設(shè)備上的自適應(yīng)布局能力,主要用于相同級(jí)別的多個(gè)組件需要在不同屏幕尺寸設(shè)備上自動(dòng)調(diào)整列數(shù)的場(chǎng)景。
, \: X- G! f% c( ~; l2 z& w1 B: J$ f/ U- |' ?: o9 s
該布局中的每個(gè)子組件都用一個(gè)單獨(dú)的“盒子”裝起來(lái),子組件設(shè)置的布局參數(shù)都是以盒子作為父布局生效,不以整個(gè)自適應(yīng)布局為生效范圍。7 j9 C' \' ^- ~* V" s6 g
該布局中每個(gè)盒子的寬度固定為布局總寬度除以自適應(yīng)得到的列數(shù),高度為match_content,每一行中的所有盒子按高度最高的進(jìn)行對(duì)齊。6 O9 n+ S2 H2 P) a
該布局水平方向是自動(dòng)分塊,因此水平方向不支持match_content,布局水平寬度僅支持match_parent或固定寬度。
3 Y% t ]5 M) t0 A自適應(yīng)僅在水平方向進(jìn)行了自動(dòng)分塊,縱向沒(méi)有做限制,因此如果某個(gè)子組件的高設(shè)置為match_parent類型,可能導(dǎo)致后續(xù)行無(wú)法顯示。
. {0 f) H8 j* S, N" C6 L. |AdaptiveBox Layout示意圖:
. @( t6 g- Y& b) p* H! p( O4 e! U9 Y4 m. j/ g1 Q; ~
w0gbtzt1j1e64015941723.jpg (31.84 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
w0gbtzt1j1e64015941723.jpg
2024-9-10 09:42 上傳
, H& Z/ }# G; d, H
7 P8 F/ i% A( o1 l3 e6 S% DAdaptiveBox Layout布局常用方法如下:
; W8 e$ `, `& E2 n: [$ l7 n1 W
2 b( @" x# ?3 w/ Y5 ]' D0 W1 ~
1 e* p8 h! Q5 H2 }, d. d$ a 方法# k, S( G' o( i( s7 B1 ~
|
; s% H. t) F2 y5 Q' U 功能
; D( Z7 {! H8 v+ W* z$ D1 j5 a |
3 D$ A3 x3 l* h4 D5 a( z addAdaptiveRule(int minWidth, int maxWidth, int columns)
. ?4 M, A: J6 @: O' m4 I7 b | / E3 G) ]7 S$ S k6 c; i( E) ~, i# x
添加一個(gè)自適應(yīng)盒子布局規(guī)則。0 }% h4 ]% [, T6 R H& G" N
| 4 I' H7 l6 d3 z# A# \
removeAdaptiveRule(int minWidth, int maxWidth, int columns)
' v6 O- q) m7 H; @7 c |
3 a8 ]) Z M. n1 S* t6 W6 `2 R 移除一個(gè)自適應(yīng)盒子布局規(guī)則。* Z- n E0 g q7 J" {2 ^
|
' ~/ |) J2 c' L# F$ N) G3 i clearAdaptiveRules()) I" b! i s( _0 G# M+ s4 M) ^. T
|
$ z ]7 j; C. W0 t# A6 u 移除所有自適應(yīng)盒子布局規(guī)則。9 C4 W9 d5 k* F+ a
|
. L0 m4 X' O% Q8 C1 E& i在AdaptiveBox Layout中添加和刪除自適應(yīng)盒子布局規(guī)則的效果對(duì)比如下。
6 B9 \8 Y, X, M5 g) u7 D
. \0 ^5 J$ u9 W8 r3 {* _; w
xw05diosmxd64015941823.gif (368.71 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
xw05diosmxd64015941823.gif
2024-9-10 09:42 上傳
( o. [* J6 M q, `( J% G! C9 {, A2 @: {) }- E9 ~/ _; c
XML布局示例代碼:1 f( h* X3 d4 y+ g
7 x" J3 Y0 I- C5 o' c4 L zxmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical">
! z8 ?- y5 P+ C xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="0vp" ohos:width="match_parent" ohos:weight="1" ohos:id="$+id:adaptive_box_layout">2 b2 h/ E0 } U R
# b a* U4 @) eJava關(guān)鍵代碼:
. O9 H+ c+ K+ C8 x
: x+ o6 m: C4 ^, {8 S, C# rAdaptiveBoxLayout adaptiveBoxLayout = (AdaptiveBoxLayout)findComponentById(ResourceTable.Id_adaptive_box_layout);! u3 ? J$ {& ] H" B H& t* k8 ^* q
findComponentById(ResourceTable.Id_add_rule_btn).setClickedListener((component-> { // 添加規(guī)則 adaptiveBoxLayout.addAdaptiveRule(100, 2000, 3); // 更新布局 adaptiveBoxLayout.postLayout();}));* D6 l% H) K' l. {2 S" l& s( f
findComponentById(ResourceTable.Id_remove_rule_btn).setClickedListener((component-> { // 移除規(guī)則 adaptiveBoxLayout.removeAdaptiveRule(100, 2000, 3); // 更新布局 adaptiveBoxLayout.postLayout();}));& ^ v! i, \1 ]+ E5 K, [
: |' `6 Z. {* g% c
v3y2fmdlg4b64015941923.png (401 Bytes, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
v3y2fmdlg4b64015941923.png
2024-9-10 09:42 上傳
6 o" a8 w Y* W; m7 U' g往期推薦HarmonyOS學(xué)習(xí)路之開(kāi)發(fā)篇—Java UI框架(六大布局開(kāi)發(fā))
" D6 K( ?% t5 F8 {8 S/ r X鴻蒙OS制作小游戲:數(shù)字華容道(自定義組件踩坑記錄)
# N1 {4 [( ]% L3 v8 j5 N' RHarmonyOS學(xué)習(xí)路之開(kāi)發(fā)篇—Java UI框架(組件與布局說(shuō)明)5 K# U" _. M7 W
HarmonyOS實(shí)戰(zhàn)—服務(wù)卡片初體驗(yàn), f8 W+ M! q2 _) ?, e
7 D. c5 H! g. m% d6 |' |) P
w13b1dnrdro64015942023.jpg (71.14 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
w13b1dnrdro64015942023.jpg
2024-9-10 09:42 上傳
0 B* v( }, `* b! b0 V6 e3 e
bifmtkenx5e64015942123.gif (45.46 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
bifmtkenx5e64015942123.gif
2024-9-10 09:42 上傳
- ^, O" g B* F) `5 g6 g% [1 _
點(diǎn)擊閱讀原文,更精彩~ |
|