From b4817807b18a48a8016f61e143cc45f5ae118a6b Mon Sep 17 00:00:00 2001 From: "ester.zhou" Date: Mon, 30 Jun 2025 20:45:03 +0800 Subject: [PATCH] Update docs (91082) Signed-off-by: ester.zhou --- .../figures/accessibilityUseSamePage.png | Bin 0 -> 43242 bytes .../figures/applyDisabledAttribute.gif | Bin 0 -> 23676 bytes .../figures/applyFocusedAttribute.gif | Bin 0 -> 6779 bytes .../figures/applySelectedAttribute.gif | Bin 0 -> 16749 bytes .../arkui-ts/figures/drawModifier.png | Bin 0 -> 70190 bytes .../figures/en-us_image_lazyvgridlayout1.png | Bin 0 -> 37529 bytes .../ts-component-general-attributes.md | 3 +- .../arkui-ts/ts-container-lazyvgridlayout.md | 237 ++++++++++++++++++ .../ts-universal-attributes-accessibility.md | 218 ++++++++++++++-- ...universal-attributes-attribute-modifier.md | 189 +++++++++++--- ...s-universal-attributes-content-modifier.md | 34 +-- ...ts-universal-attributes-custom-property.md | 16 +- .../ts-universal-attributes-drag-sorting.md | 81 ++++++ .../ts-universal-attributes-draw-modifier.md | 56 +++-- .../ts-universal-attributes-enable.md | 2 +- .../ts-universal-attributes-filter-effect.md | 29 ++- ...-universal-attributes-foreground-effect.md | 12 +- ...s-universal-attributes-gesture-modifier.md | 21 +- ...-universal-attributes-monopolize-events.md | 19 +- ...niversal-attributes-on-child-touch-test.md | 37 +-- .../ts-universal-attributes-outline.md | 94 +++++-- .../ts-universal-attributes-pixelRound.md | 16 +- .../arkui-ts/ts-universal-attributes-popup.md | 74 +++--- .../ts-universal-attributes-reuse-id.md | 4 + .../ts-universal-attributes-sharp-clipping.md | 124 +++++++-- .../arkui-ts/ts-universal-attributes-size.md | 147 ++++++++--- .../arkui-ts/ts-universal-attributes-tips.md | 2 +- .../ts-universal-attributes-use-effect.md | 38 ++- .../ts-universal-attributes-visibility.md | 12 +- .../ts-universal-attributes-z-order.md | 13 +- .../native__interface__xcomponent_8h.md | 61 +++-- 31 files changed, 1274 insertions(+), 265 deletions(-) create mode 100644 en/application-dev/reference/apis-arkui/arkui-ts/figures/accessibilityUseSamePage.png create mode 100644 en/application-dev/reference/apis-arkui/arkui-ts/figures/applyDisabledAttribute.gif create mode 100644 en/application-dev/reference/apis-arkui/arkui-ts/figures/applyFocusedAttribute.gif create mode 100644 en/application-dev/reference/apis-arkui/arkui-ts/figures/applySelectedAttribute.gif create mode 100644 en/application-dev/reference/apis-arkui/arkui-ts/figures/drawModifier.png create mode 100644 en/application-dev/reference/apis-arkui/arkui-ts/figures/en-us_image_lazyvgridlayout1.png create mode 100644 en/application-dev/reference/apis-arkui/arkui-ts/ts-container-lazyvgridlayout.md create mode 100644 en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/figures/accessibilityUseSamePage.png b/en/application-dev/reference/apis-arkui/arkui-ts/figures/accessibilityUseSamePage.png new file mode 100644 index 0000000000000000000000000000000000000000..6517c5252b96def9ece47eed83dd207806942004 GIT binary patch literal 43242 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

LT`D_UgtD|27L}95#W1p33(v|HI6I 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 literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/figures/applyFocusedAttribute.gif b/en/application-dev/reference/apis-arkui/arkui-ts/figures/applyFocusedAttribute.gif new file mode 100644 index 0000000000000000000000000000000000000000..f1502f158c16f7c9e1281ef6ba1cd47a97ec237a GIT binary patch literal 6779 zcma*rXIE2+7cTH~PAUn30HFsBy@(J|5$l}Lq&iWMst_O)X%mr-<%BMv#)cG2R0O0M zx}wemP^8JkLPw-aQ$Y|x+MWNsU*PVw_S$RhwO{V%&F`?arO93|EpP^i0sz$&G~fpO zH#dn#EF2xo7)%Qz13C))Z>9fV1OGcK*x1+rfK@T)B{XUZ=k@F7+B(j4dVOP2`uHzd z``>tU^UT_YoYyZbriVyb@0?sgc}*=YZrDYy-kzL5mDV3yD#caT{AQ5(uC%bkyX4)Z%^-1599RruiW@wi?!)-+)I$tk7FWKXkO#)PKpmt7}^Pu(0SY+1EQn`Ha; zD9HC{YxkB`Ec<6qJ0`z57e8r#tjjL)#p2AGtkg(!-h}_dF%9a6!)A-MEeq8>zqDMQ zRX>|DVYek0EGas@*zMN5KW0pu-K^{Pe*Ndqis5exlsYZz{H*++X>~u{y%&l{eg*Tp zj^CKr7gqE3!>pWr_lw2N=M(GU*%MJQQ`yz4#;(=6E+uH}V{`M~yw|hN&MgNby3*6e zFBbM>=YLpQ`>Lx~v**<4G24-h%l!m$%kj9@qOMhAlMy%PDMoNpSayG5@#3qtsT-M_ zIUjzY+8S`N z%l}Tt4#T&TvUoptgR=X9kJvxjEB zvc-;w!~Uk}$*Pc$-x<8lYpE@189&l_ufnV6 zxN%EJ+S^C>z7`kt7gT*VG48&aK9QL6~23D zbzSddYt`cq1$0 z`hi2;+b$Mat^M%dC z3%{9kHFNbNV@L|2594!!({!ic7-*0out1^2$-*QBEXym2>Q*?Mv?Uquovab7fM7{{ zX`%*(?C23Aacvg?&`S(6O_Jahj$S^nl`ktGGdj zM+pA}CYt6Qa+@5_C9#5LYr!7t2T$AGnuDL#PDBSMzcU6}?so3`$lBBBw+zbF@_~4w z&e`|EN|VsmpsGnftI(GR+@ej>=Pf@DNsZXVGQf${Ff?9yaem^l+<8G7k>J<^5KinO zYS-tMM~#{32v zoxLey?CnW=Hp`>4wqL~&IbTO#&6td$2~zlnjJx^)%@}}$XLQK!eR|(kLW(xhBu5w^ zTT5Ihr%g&o%u-mkPYWuFy@r#`@^&{U>Io3yA8Q;GzGN529DDXevjs>wpJ3Wt zVu>VRQI6$+gsj|qhN^ZU+2U59xyX!H7@8XQO)})2>SUwc{-KP;Ul|#1c!*~*tpDaBLCt?DDFV|^igrPi>`9g5d0vFnJ0g@rAssDv( z4{-3~MNHv++l^I+T9_VBygj6Xp?yL@ps`H&2+Hv}6IGVqm?$ii+@*f?t(=G}A$Tjc z)ui4;jw~j_L|s4ySYVlaNc9AbpxFFMQfUr{e@25YJQY@vz3yWXK5nzssjW4@av?ZA zO6j){|GWN*lnM93cV!{|{csv_h-=2=CF$R#1Ns>(bc#rb3uYuq(I1#@anB&86a`ao+j<}?$#k|@V>~wUglZ{ianI{aq)4H(tmHP&nl!a80xXuf}6UX zIcCQYB_?pR@DSR>sHcM(3P`FB9KPy*98v2o>Z+;uSsHq&SWTG&2JlC5X8?xt%cA|G zRjKm%<)@wa1H5_%LQR(j9Pd zCR+{xSaBNin}Gbi^!EF?nRL(f3Hg84e?B=c1rLcO($Ef1adg5|rZ*4EjELdlsDJ-tM!i z#{c_|t~m*5fu}f|VeirDrp$bS0(q=Ahy37kkMsdO_n20fvarl2CF2GTuK(=78-Zv9 zbPMOxNS61sfgwm7k8A=yf6v{Dv-=|6m<@cMV-|VaU}fK zS6cvO;s)RYeh>|Y-2tE`WAL$X$NAYw6Q8U${$NGn%L9StJL}#p`3ke%GPzL6%D*n# z5WEKq_;cIuu88whfYw|pp3iti+6E}5F@w}l*&@e{@}imjT+n&>&FQ8y=Tupqs5J%X z@N#MLXV%~x9vXaq!2)x(z!YR+{T}B5h~IVFqDm86-1{APE2SE(*y(IL97ik z{?_*#D8{88O)m#D^i>+M`1)rbRG=c~I1$`c4|NH`CBlbra(M1mamHuoc9wX^Bn9QB{gR!)pdg1@lRVsYz+K#V-a<( z(f+d_&TT2aIi6G}KwPV6;ut=o@evFj3}B!E0O!WSCNP0`0OyN<=>Ty>AW0M84Qqgt zEEI=_6|k^xn*hT(XeSK%&_Y&ZLm_|A3_0(MM#FM!FKqylk0Z_jYJ87ImgF`V3&5zZ zWHDI*R)L4bFrltU0ue^RE@HAY+;$$i3I?s_psvoCT`*|NjMgASTeYyvCEq_Rq06k( zjc7F5FJ$ewCzKLcAunMK`0QbVSPqsCqtHxr6f-<;4y!0cp(pSZ0KXW4(-MMICx`-z znF|2Bxd=}tXv~a;0DSl6BZ31q{Ea1~i4Xo~1S7`}?$ip^tc^OS4Q!her;u^o0$?`` z=rW120-Wv~mM99w({L0%Y8wrRB7=m(1S&mMm*u1DA8IUsG+^w3l$1MK7k?$Cd9&j8 zeFUj6yCvE4k|iX@L{Siul0P8<2B~B$AS7%Tg6RUFmyBWv03Q~xpHHGNQPw=@G!xj( z1FUI2RAwpziLrq}WAbHLCP?LT_9JPau|IVQXxCxL(y=)0(;UlCM0kdd_s$kT=0lch zG-#$8E62pD0MJ2a5{-kAq+v8!C~0eO8OA9v!H_vfSCDQj1S14M(;PtGY({snA|Xp) zdp2*f5;z94t1Zue_e=W0M4e`#%@B~Y1i6yYRzrCE7O&l8^cMjM&%%4t#pZdCDuTA- z;TFiy;%@XiK4&|EeoIE#BWOzj+JTO-Cx;%?1s)4xGx2&Dme@8{n1wE&(sioc7{t#- zm_IwO8O2HR0}SCae>HjGyCKn1D4ux+UE@h@^5n&M;pvz#XE#O*xPu?`%Qq)CI&hD3 z$mz_BRR0j~?f{=i|ES17!Ktu2*@1_gAW8Dc0Y?Caaerk7EnBeqyW_uMv-|hlmZ5`w z&Nrf*f_!RjE7m}1K+vQa*dk)XP1jfCSZ`Ktb#7{1%EgCY?h4+tfPDOcx5j5aWCM}e zp5a5#?$<;LnLT&P)7;Xlz}2^^H@n9;_gz!Gq1+w1e-yj<`hlr{E1AKLet@e0h*LCF zW&*M_j0_odWXW^p&G|KqZ{uT6FgZicFE~3UcI`DF!y{NZImi{^XSDvBiwWDE5)^Kk zTXiZb+8Fc%5M~k<;DKq(=sM%veQ6JQ*n69ix9$4!j{MGR)6L~7hH#o5#_m2jbQE;R zdMGx{o4FX0Xn6)q3t_wE@0918xaG=dU&11w84TXTP^De4hREGR$v|XUkTmYWiUr&J zBIv~t+iC1bGIfBwQVS5DgqrZKO}TrvdxY&F%cSidns>n<*qsklp!+JpA1!Ifbv5LA zQ*23dPDyJ{2?c;c#w-&ow$yZb?A%fMF}AcPr?juGbfB+v@OSBuQrXD9vN5-^iP*Bq zoU-Yz=IjJ=ysE1W*=0`vqus0X9y6&lM1! z3&i^c5~~8Ta=G;Wa*BJoTwJ+AZn@I)a%zA1meq2aa)sLd3Jv!Pt+)!E+zP$t75e=Z z2CEfx^kFlkaaW#i{M6b_AUj7!Hz6XJHa_m-?QdInSKR+dKgl@1v$$)fwQ8oadZIu&7Ofeo75p@EON=fh zm_Q1VLI+`DDuT{bN67d{g;a*V{LzqD5D9XnMmK(HgsEx7sW$$2^<-QSSRDLezSS$w zD@G8}x6mF}oqWD2u6^yD#{-YDcg0Q*oZ1%J1Va^#Q-3q>9Fd8Wxb*KO#VfRt&0d4} z?NlF?2W=0hmwqdsRh#?uT_uK^*>F)MOl^09QSQ?$+ba&17j2v_y4&4i_HDdn@QjRZ zn3%*LGP!Bqw=nv+{U*Qp-rX;S`TrIc4wmH)JT7}%djCU~ptHQJx1wU;ZpldL_a)K% zQpec0p}wD=2iK;@e!c#^KKgrga%o|CW@%)6WBKd+{HveO+9uw#PB+($KmU8AzV1tR z_hRG6A0In6Kea9mv~TwIO!Z|ClpMNZWt3sI|0a`>Y`m9mq080MOw-ZLG%>isFwWR^ zEYrpMuBk`XNvi^DkDFfBIr~iS9exuXIDi>8yTm_xK4Ai2ObsG`pcxWrnKZ&SG)@Bys{%X zm7e|;4&K=wE+vjmdG4;2fk%r2*ag8srE$LHzU&vi|I?2D@A{8LaCoW-9jQ-1N&JsR zh8q$k)Ria-fZD4Rd395SR{rqt6{=)dRS(bmjXj7bi})&-%YCvP*N4Jya17 zVdT#fep(59+9iUUc{^m(n{)LeOgNmmA+WR9snYv(U?(G4$@T8b-W`n@@^YOWR-E1) zUQNk&{(jm(1Gp!F|HmSRo*)A5(IMA!uLWhu=>*I$>vh7nQt<%2*KoWwb7xTgi6P*U z3LjBB+rwn2Yg6XBJ_Rf8oN4Elv)yOrLJ-2I38obfFoaO&xXR>1FP_eiHm}wVKCfro zlSo&*w##H3M!$GzxTmM%WqnZB^^=C1pX2zFs4E0Ysg#tGgGv){evr(fZ~EB8=1)gy#8T_&A)Lt;!TeZ&O2h)1S;IBb1W? z0v@D(mOkjgkmJPT>?V9+2ny!2&$1?xTmvEgV`qGvR7*eF%<8cSs;2U@WlbEV#WYx1 zB5_=|*I~t6RjLpq0Op7(N{UGa#phMf>L|JnQKhM4=XH(x5O5D+hBH3 zPr=d3(Y#4}K-KWPxvI`OL&;*cHv|Y))9M3EDx?GP>JsKWQ2VpKQG9&L!29hRK}-e1PX2r9*~R*AI~rA`rVCD_$-O8cqweXYcZ-GHzSc~(vKs0TGhfS)Hy~=9Mhr{~(*X&C_D$rL z(w>s{5QdvUv&EWH-l1_(`ht|=?Y|>g;9hDt17JH~`%y$kuanZ=R)Qn?v?0V zFj5Az1eiE|qP&de_7T}GNqYeZmG)W*?VvyD_k~*}#MKgbnv-7K^agM16;s(c8a#iY z9wGjhI-f#7DzhgEbppm~tu@Hx2w>td5DH)mAxVxIHERy70@P!VS#kGJM9E%O4HD0k zK*Mi11gr0FwEX^-DTSB*mE8nTp9(QLN4c^(urdY)ls91xn&#*QN^3xP^V5k=2Zp4i zVU#o-mLMyrlHj2PPzy-r*!e*|Jq%x?F~eYxk8R5FDr(OJP>JFG49L2oM7D{_ul{d1nv4)uOmm%R*b%C90 zcZ{%LvO@2L3jj*OVD66!F3B$Ws9X;mNT74IXhOnGE?0KW2$Y2{8!7+jzDl57wpU_f zG=#z{ZVPt|o;7FtdA|ia5V0f;bI^zbj|IQ754B|BHofpFPDqNTy`SADyDxr9aE7(Q z0!>yFPs#Mr$bP(VH)n<D+?MJ3PQtzkI?`h%W;`XA#7P9?3lZ@Ors$fn1Lg!z$T0u- zZY%;ODK4`G1f{G8N)d;a8A5OifY-b2udX{hWs!e|Oj;hoZ5^s_xU6yaVeHRh)^0tB zIz;ppe*kq=X))5mO0x1m(m*PAX8?@CnG6BZZ;L&C^<@XHRPRK77JFU?tz(z6rH!Ii76N_pCU43AkUwYm0lUfs(il?LqTcWp{DF4D6u4Rmhn>nf{J ztJW<&rDzJY8r)r~k-2&~SY?0C9fE}>p>TVsS&($~x6D$(O{>!>{r#<5Zq;Ikb8ezJc&^`l z-Pi5w@8jwgWeyGlTLHj$8Vw`?bN5-&Qt#juUSg@Yy{!lZ&iy2uyMTW!tDFA*&CY(> z(ec;(`7`#eKfizfVrMrtGWKI^eAd{we{gu3K|44#{fo=JX>0dQqyt&Z5W=r~AHfx)$eVv{Cl#83nUQ};2@BJ&yx476IZIY^{c7VY?Qe1kUXY?v2 z_L8aD9~^@&pRoIKTV`b=Zf*>lb3FI;T7 zbool_)xZ8$x3zb4c3r#P-E-sSt=o6*_TIby;NhdkPx_udd;a3(tJj+TH*W{tz5g&c z^l^CP)8~Ii$Hpfnr@nmsHvRp_%+Fu50E(#Z*QjdC!85EPyBn)Jc2Z3Os{ER2x^{6K zHooX?I&%FFo>!5+|JmA}y@C}dB74pry}4hs?nagWxw_kxuFKfen0}ukymLg164=?L zV1^3u&kisu^K6{#BL`s~vhpN^POBJ=ZX+CBaxxSD)?B<2M>&0B<$Mi50dYY}A6$=p#SmUGrAcE|8jf%)!@4f3N_L|7JH=2Rz$%?lAz`wkq-P@{{n+zg}r z<^h>TjIn$10hIOC8OE`=L(cC@$k_OB$PK@dh|PEzGLYJR^^y+gA>+kcx^qV1y5i5r zhib4~xb0Z&ApETGxQ*YlQ`_HPusT^IMOa{F(}Ae0B6nZo-51{w1GEhuT7_2}d*xdV zct|z~1-_=e$Bvg8bPG#2-b?OmR=EbX=Usj5XMVA~rzJ#xE%JjvO{F%*7S8d{?h8ft@{qb{oG`9Ho z%R=q^!l7aLUtEg_Xkp){9+0b&#cgb%sRSo(SF76gDKQZRf>?&@TmC_D<5oqmpgGp7zCigB|y$BzUEQL&*?|nqi6z23c?sx@}e6{ z$#HEyT+s`QGvJI%V>=Y0d~F#y@fV7x!E*ZmbO=w5EmxuKcnb1~WWZenBgeZ9P*em# zWl&Q&*RCC3j6|V==-}n&E3ZerNuSOV}4y$5o1MRw`$lIySr?&#&*fbM>yC0uGt?PD~=01 z!hOGp9S zFI5)Tnp*hx1VoJQskl{Z?$Xn<^s@;_{g+UI#JOEkxD{{#oB=1G4wwa8?S8qses^&D z{(bt#oI=^Tj!*v_x3e2}bsKecoE#bd!C*A9m{lMD`93!Oi_d#Xqt)BlkLc;${rl=L znbt_B@1fDuR)RNn`8CJNV_>H)E6i-@bpcv-v`%pV6XTcCb7A z^3^v6qr}F(kVbD2+Ev&(OzbOvVQhSltKU2EZ7MnC2H*U~`=Red;yy#eXRrDvY1|w= zJ>>i3H#WQ5-tIkvllA4xB!#+DM`zpRwsD%)nOk?Jc9-7O)!j#+)@5dN(@C{~OU@A~ zCu@$p;ppz-3!YioJvTG`uzBl^E$O#UogXnbxl^>~-qqIkhP+(zww3bfEO8pLdgk+kmZIzm;f2DEMSOZ*pCH%Z3eCw`^~NhuK7=oWm1aY1(Q7{X4qs zj{hoC|Dj3>^qeZ;a7DZG=Ts@DWG5OZtk}K3VDF*BmDPXzdH8643EI$GK=Y%q$Se~r zL9Ahc@xHn%3UQ}U&NzPA)p5UU%kdF@K^$s%v)61 zT1nYNTZ@ODzXo5UUPE7|AiO(^s~;16y$~R|2K_}i>jDFR0pEax4xJz+NO8!OJl|Kp z*f2%Y3Ksb7iCT!FOo3A6n{G3OQE*Eb2Zo_-lf3uVJiEgX8l?05cz$;eEU$!Nk+N;z z>Nb;!1Nu_ctM+JoM15O|j1C5)16nvL&8wBi7yKcfypZ_H>$mH(=s@Y%RBW}R#J#rq zDWfK!C~m0#?u{4PWIIkXu4M4zvwnzXD6-PHm+K8y2=6Az+DHgiV#J^k%h@7>+|(g@Ost# z!x68`RpzCbeOAUFsa_4pi3gi%e3uzq{y5SLQnjciBy->mK|+0|_g%9m2!pRcPR4#I z0oi?Bg*Zmbqsom#-hGC#%l$+40(vj(@nC4ZI#*Wc{N9!3S zWbX}C=->Lz=YUw11PLag&|{^;=0`QBx7 zKEx4h!81e6hZ>r+?*ts+$(COAqG+4LmQS1-a&PSex-?W(ST##-r3_{e9jMCOI#vYx5u4)kD&Gs1k_0a zEJl#NCrcPq+TqkJrWeV^0qUB@ZDHrpNglGJR_WM73Us4fo-=_J^fzEOUHT)1AZzSj zyuX51yRwbz_8Ix&dGK=tUm{Z&qjO;dOZ7`z1ATbuT6L-HfK}K^Nt7l(^{WBT3q@BY zR6RDipcPj613(ZORQhKD)ACm6y7eRdgU{P`Cg#vl-2T<8!fcAm^vcX^dJd-ax)bK1 z&4lb8$Rb$;9LcFP&8k!Re0b;0_E6n4o#!eOGwwW^aNm1Be8Vl5mj;&}1B-9O% zqCqYGK=bqanma9?B(37rt0oJCs?M`$m;TKM&o8lF{c^pYp!D0NQvs$5=pg>LD$v7Xlj|7oSGQ@ym4dVS(eU26O#u*n_HGv#anmW zHnqBHWckqAL1Ac;%QSoa?CHq+cTXH0tI4bp*Lf5QeI1DzNG8q4;5Rba3&jhU5~%*3 zUJvJ)+gRA#wzj`3vKJWe77_^$9bKPUJ3h9zwGmkQqtNF#{J)vTOUaa-ndzN;quXZY ztvWiMWOA#X;d~Odr>(8;M$gOVPZ}B;j-77$yQ^bhc<9sk=dt%Aj|TcbXkHC`_;B>V zVMh$!7K0jhuzfM#I-G7u6?ml?9io>AmKo|||ww=M>qNk7O8)R}#D=E6k zY@^L=&H)-_KaIUEJZ#6-9cz4-ZU~Lc%F4=T>TEX@Wb^pDD3nbUP85q9!QhCU9RI7z z{r~-&iiAP1sb1r{V%cjRH_io3qi>aJZx%Z*h9O>etOc!V{=^YO?RGgQh}vZ20aHcvRjv$Ja-mjSMAJg<7}zc`co^b3UHKz00zLD zV$~Hu4p_7@ErTUKUj7GHr+saNk>?w1hao-E{T1+U?lD`r*d*atai zQ*}|~w|2Y&t7q%+`E;K;9{4hW>b^RgmV_y=L%d1*Xkd_-azFv2gJePKVWbF#rlxWZC<2tKQ@8m=gM52cjzN=`sL?i%CX93DQ|B^%D1Bb$rUPQXfGc`^^V~ z9YseE#2q;qqVY!2!yF6H+A%854lH@`;Uhu!`|6HuQiL{u{aUm83SxFMGl%p)V)aC*J%5Ct|x zYtu4%H~n5O_Nm@Ga-xWPLRb^AzQ)2)1M_tW3N=nBI1trted5yLyc33jjrj$(M8gvq z9tyRw?o$LITeYrQcgJS@@%z2Te^=JuSyoOk1FTM!0#-PKS|2DrQnk8rx6jFQ-R?Vm z-&Q`p&@#9+x@8Z-4adQrkbcH~o2QFU-kiMUP%|5UE?*dMwgVcnOnYFpY%S^BvA;Zj z8oWKy|1+bQQNIV!CdDh&l)}^8Ef*kEQsUlA{)0(-Yao%_f*@>C(g|g7PtmWR#0yay zcNTrgcih>!su)K0013pE{jm0`ZCVrOk6Qd38@juq!0Lc-eJKiBDV)qj#We!Qp03y4 zweGePV`OmGRFnTzP>3LEhOV(fjj~qW_2m>Vbg9)gZskZ%RzR8;B6)ku6wc#iIFPw;B=93$OVY~vcPNi zjkT(4*UW$Qp7cM&NARA(1!rK*0vnFHWLEXKX@A2|zR});_g!nN2@)cxEk}R~p4@35 z3i8Y9z0&LA?0L`HWxWYymEmS!(TwrhvwR7ai^vHGu2?4AeXabxApNOQ_PlKwF15WN z#VHq$$9EF1NdyyJ-9fTdFU~Nfb)O{dL|;EdK2t#TMuTAWUaVAo(!P=9#o-cWtLuPV;vc-ImkY>?IqkVfRjnI{T>H=@58!SK>TOZA=$ zU3}@rL6^+HK#T{q#yHuZ*T(F|CqoKqutwDTP`P7ci;?s3kHJNDVvKYY{IgglVPwjw zjyQ!NQtje~T6N#^+7~~?&ueI03xMSx2aWU#__m0epGKE2t(AG$*3z}oua$pd@-Pa!O>kEB-C;MD{!X9(pg2id`@sGaVQb|5kgw^Q{e-cP~MgqPWt$k4T6 zFukQmPAPbU;}>kg+K(1ew)Ioo2%gYVJE(5Wxl?_S-Dbi@)={Afq-Cg4++L)rAlP!Z ztJE1Brdr-n(PODY0ZW(n*@v~OTpBE8sOP1YfpVflg*eXZd2kUL{l7t>2`A?{6q;~! zo1UH?b+sdb;IzHNw7uJ~+x$5iVt@b&BF>#BNF;p_ocj600R%AwvK0W-Qb{#rqA37g zAu~uQ;$=FshKTv(>Nrqb9seh7yxuK$fxYPNIooG~rJzQk${CD+kAObjD)`yX7eK0tnT^<6ki` zI7wiiWRr%+$IhWhM~Iv^j_#2t^lfXanaS@fF?bt2llxZI0T9&8)xSd4Yd19eF*Eha z$!R;8q)j25#Gp*9Y(YBuoG$angTT{xm#vspVoXk==IgGK0vVQ7C_s zF>NHmpLG0t_xbPUI|?lXhiUYC`X&q}amrCFEZyj}wDhM{o>ldq-;I;_pR z_$CjG^*ik>N>k;9#k&vW7LUyS`ZPL{mz7g>sH*KkQ%6VJ&EC7U2M*OWHl9CPKjCEa zNF;n`Y4gs)o5zdT!9d@_g#pLcH(go%gWjI0! zfjHmUp$JRM)ne?^F(_v-Yf-4fdh|UQ<{~{oITcq$*4s{CW^6aAz}3A@HtsRhHPm5VBhI}RW*3Hjio>rlGC0B2Kaax> zJ5A=R^!UwW#wCXK|C{{v-%)7J=LS%8t4LRkYR>02GM98GM|bYxXobX7G_8~PtbHFT zNR9$?APn1Mdik{@H**L?bW5^Wj>7OIs^Uh?QHh+)Iv=itLA1G`MwT(LUiTb5I51^U z1IsF%^cRGfo~uEYP}-H9agA*liawHD-`5C|uw;E^t*PgGxn~1uyJbQ6#=vH5x?>>? zfPpBWfYx1F8kMti866VAX&2vmItX@FWkmJw0kl%dRF0M!0H6XblDdqz`=Iff4dJ)y zlk-pnfvBRMkCo@&&+s!@xIiDafNz%lJwj@`LCw3)| zrv`t3an%UO&F5y6N;SSKR|kLTg@`%46nFQ)vrahLk?okSQh)as)G!fblF z1cfhKk5ng7ijME9fJE)+2&NLLK$QjksbfEy5g+wu(uw$*4&7Omn7#&1?gf@HsYDFE z_yT`d-e262#uNRte1_c%t{5W>1djZ!OB}YU>Y@SdXxkB%5tk4w6H`ukUa4swU~>m@ zL&A7%7~>b`{XmhU$V)kI>85|Go7P0+IEer!nl0wx9(iskCH(W%ol6PUm*R#wNZ>Cb)~i}KmXgHeYB$=6nIF@@XF=yfw|DEAiCvA zVo>0`mpHZkv#H@?Duwi&UxFZ9Bh~v zB5*oO5YJMODhCaCZP?jz5kwtLT6*E_;or%lD1(HzSWHWPfj%E|sSm;EhC$$kWB}7H zavJm^XHsASqqr@|FbLwNMWbV+Fm?3{&CB}OhW@a2^u|FLI;f#tiSZ0}5nLnfZfw)q zPV)dXZ@?N@zQ9igVk#7i>8bbwt}x568>aa1u5%z+6i!x5k^}+f)l&B@rH~DzMD&_f zx_Sb!K0CicbYld?sX#ChGW3B#PyCiKg4EDh0l2DAX)>|4IgDbVqp&6%v6eywaU-ii zAuPtJEp93L@)%cT0JDg{OW3W#I11zx?r1rE5+s~)rJ^M2T}gGxK*?YsOyqfh_-_vm z)02^U^d3awq4xh``p9#+6z^PN3fk!k{QF?MAsHs1lxsY3?NqN|Qw;ANs9n`uN{BY) z{jV1Nu{oL$%i6uxsDJ+a=_$MFAK8wAK>wJw{&(N}Bd?G^NV4YYvo~KoqB;ViFEat~ z>C3N@bv?H=v(Mj*{P;2V4eqewyvi`dB3JY$12 zk2DF(Jl!LfL8qr!hWzFb#v(JfZ{NO15}LCrf;7{O*u3ZG{Hbu*V@$9 z(b;8@rFGlIhO5^){BRss&xIcLqTZYLp4@-*;@Q)l-h0+&9=#`;J36`~cIKgel8_~r zSNXZGUcAgZq&dRp_vOoigTqxpD_g=Mno?cXrOi)FUAS$lQ~H{)TBo><&Cv<#<2O35 z>+py<;kK@3;mRZP9cD!e^CO>J(B0URe}VB zwx{~5;<63ap&RtXzj+m`PHj$dPf2o5`ptFKYTLk# zLAmh41&RK7tDM&VpCic}P=IsZN+S;e@!I^z?&RvWxyJdzG(lsvcOl0ipxG6U@-5-H z5GTES<^Cw5J4Xatl$=tEwC+Ib0R#f9gHCvaS9=DQ8qzM%YsbY!i^tTmw$vk*<;L60 zkGC|QWme`f7v?wDulL7cbT}_dQ1m5t@bmE_~=anmPsjtG~RK{Wmb_tX~!_I!)&y6CL#c*3Os(A-nkp{QxRPvZol+HJMIY!$}|Qw(W2__NFzkURpw+t7tdLZfr>guXURSIImBA8V z03+?NBMyiZVtiK=K$tK1$}3v5G@h>S9K1-3NS@B83@#z1G!w2Q8AwGaSlc=IPvb<$3f;Y;ziJ(1Q^PNs!H%E3t6>+muyFo;g^#-C;$l3|!J|6E_l$l05l!n+3 zpSfmE70=gJzfl@uc`1)eMiONX&{Dxxla9x~=FIjW2lYf$VFOzZ5aQH#P(i$09f}*T zzwO}iBxCSz{WFd7ri9zAfGb|4X}vgP`iCHT=bz;}L4}Cvjq@{2Ru6%3H4`5hNMllwc=%U!Xh+TznmYE^Y4y*|C3TSdg9Qz*N+r!ot z9{R?EgsRy4H}C)PK96J4sDd{5;m>){i-`3+63Gt&d2P!a&9sU(%C!|`4rhe52zHCI zR2&#ZH;buuix%9|qa9otXOG=eowk#nG^gXm0FEg2W+ijt>Eev z2w{zD5Qxf%=CZ$iSbB1$O?FcN%6$-8$y8x0q`*8ADYEvCagI)_zVX?~0E=}@Hd=R^ ziJ5jw*`|3Cx#5i5)=GLEoA9vWp6$+9>xi3_$MVzqjS2_LmqdPTawD@(rSF0GKugvg zwA`oG8R$b$>N`+z$&CThH(Z-IIYmK58>$elkEX-=%eg<@TXgv3YS?)2 z{!`q{duZXPm>4EIP{rZVA{LDDo9vMwYK^uVTnN>v0R2-EFsK{N!~#K-xNir^ZKU6* z_BpyRNOZd37jg>Ni~L(S@PE!+{0r!4X`ktv$C(+Q=9mtGAV$_WF=L#RF+4LfNl%@g z{P~lcI;@pGF$Z@bNF-&w)k+`H-Te0B%rA1Fx~UV>--hWB^mO_c z0V2)0Fqo_#rm4@rOid9vz9=-8Ks1H$kn7eb^o;K$JkcSs-7Mw4VdgvC9ItIfCgi9=RtFRW7@lG#oef+-r!x88KyB;kQ& zQYXuPo$02VPR@>IiEm9e57?OU+~d2ft*z)u!}^I67QR^lUJ^2upqDhGoAFuSDap)Z z3zM!z#4~tllhrrJk3RUcuWOKRV6a>Lxuc_Fboc|7qLD>GccR5R9THlTk`qnhuG+3V=@!|vr*YWLcVA7_fs+URXl+&(WMwU{bwjWEetbco_(XU$0bflV4%?YqpzWix}tU?h#YM|a}V zpHialI0@|>Z7t0$ob6Jsx~x0q5kKG?T5lq-a5l0uOPb{JmM&Vf$Tsnzwy~eSF}%RR zfth$q7~4k3e(-;ea{s>aKY>mRVgD@&*)N_0I(t*Nl;4JiXaO(ksm7pdelwHfc2)uc z5#+Z1?&X>@u&MvTMp+d4HqK<#(pJH)huxHAh<_u9bJHfFF zkw@(u|JAT$%U9&Z$dlQhAEPCpJK=w3C1grz7 zpHE|JrgR9Sew8eH4v$Cit-~8g07K5$CWdzWLF1H z7@VU9z1OJbkhrDpQq1KU6Y1^&xbiIWCFjC$(e9;x7Gm217@{Zw$b|7W(?z?GKUj&e?W znt`%TmNsBFjdlSjjy?i7nR}dSyBSyU0KT0?%(@8VdLWQ^B~yb-N_!j9#yuOFjYTmz z>h^;Ul7;g@35NlejlMIlRDs`uU=})D0(Lg)OmT#`c%m8HTS~7A*LQ_dM+W52C&f^MUqMJDa`vT6 z21EiFmbNd_y|T%Gi0>e#9nsAV`Vb2FDKKU zKoH^dLNQDrf6>56UWNc>6!jhjr9xMy6>5ER(ceYMJc1t;`6%e^S>nCPpD9&X+qx++ zxf+n7mb^@Ja0W#%C8-wQx*oAH9l)$ScX=Pc=|`e<(Ikv4ANWp1urk$RJ^d%)}1(Hg)cx$Wb@qm`&gfZ(7}L*|-U6#LZTh0f0cbyh@$x$NGF796nV%5XOF>mMqS;aaHIf-?+MlC`9cTyN6_mlbnhGC3jrCvQ_d}T< z{Fh-6SwmpBdf)+|R|a#A3>Lrw@UGDB*y1(xU0rwZLUhVUpS3+phymwz5>httHufQU zwIYN+_HNEdG>|r7M4~b5Z?q-xfC^SX!4M#b@WVUzf;5qQo{)=*zjrYHMh)v;`a6u00FN-!p|rifGT zF$<+&Vi^n2-`m{*z{_!ADiUvSZ}G>lCok({B_OXa1gtei|D4%pg+}Bq&G!{cq~?)t z_9PP5N%1ZTD)dW49*I`q=2M?w14U}EIUB)CCU@Y%Lb0%vWZ|Jc@PJi-^H33)>f>ZS zAYqls z1m~a)%AO)*PJj>zlurUE#_-Qya|}ny90AaJKfX*5k!grvLPMi|{v3fwL?VPA_&GZl zjH0KHGqT2**~0))AC*2cGxdFPastosGTHoqqD3Z|Er0p*mwraSS&9Zla{$n$Ajx{_ z*Ca?5eVO{fAd~enKN8b_Qav{7rM|VuzJKV^FO$fFdQ3*g$64#dbG)n%dg;%|nQv%m zA5q&r5z^j4ba;GXuk_RE5dZ2Gooa@wT9rpNkWrwiJqY|{T? zB|oO6zo2cI;jKB&O}o#^d_#2DY@+CM+x3>_n&<(;H^0n+1+zkH+xbq89)-i>!^1cu z>B!)_p`l@_f3bDSt>_bjDB65B8E2Y)i$Q1Tt=wy=ZyK@KZ}#VVQ@U|x_I9*^hs*AF zJGbP=9{#Ypb~sq|CjIQE^h=*J&rFHSKf-^!&AvM1zwhIYvja=^Y98Nz@Zi>s*H0hZ z{Pgox-?QuOe|I-u=xFb}efR#|yLUhT8vgw5^Vp|%GhhCh_%!z9>uks5Z14A3%?Hi9 zm;LHXml}^ZpRYUG+;X+>^4FG&mvvEB`r4 z?&h4?xVPuOb~q991>!razdV1Mv~T_p%wxSR!E!t%mR2VI{`H?&bJnW+VK69&@|GaB z7}F<*ey45;U9}4Dh(igjw#yEQJ4ZywX4I~P`4dbq3Zb7%|u$_oz0Yy8%jsmC6Z zJ!!SQMr=Goql~-OU5?un zn8q82e_!p`t28Xv`u1s+D~#m(OgoJUfcY`~D^XkgkUBJ7c1{#VEWDr73S3CXqM306 z5X!at0^nj6cS4E@^oxDkg$g#dy9t%mghP4mM3_NtQ3cr%AF7R@K+{^KrJmXufKUUx z6pYNRw@`cOm1E&r#N=w4EwNK{275#}0DB)o91u2UU{(X%hjQ;b;eczL9Oyz^8UZvF z;P{YV*m6Tp7gJRm3XIDL;;qi9XgIQ#DlPO;QdQ7{-{e|=5!WVFt@YNiy%)z(8N}Rb zWT`xBAc0Iye!cxRTh|6JmBTpwt5U+UZCQ1z%5NaYDxlFlZS?pb7XbshQEsazr=oYV z<5?Ef8|$&u6UOVMu`La?0x3Hv2NyJ2m6nTB$Te6w44{?^%02)*(AuxqSgQql`40N< zXV-pc=E$LWWHk|J9SKWnDs~o0L0n@s_?%k0uU-bkntlW*02;F#@Nin~4>@E=0B&#I zKdwu1?=>PIx@~@*FbDATQ;g1@z0O9%>xh?z8JqoJVErjSo=gRRH>w-%WM~1)FV!@) zuA@M}kx-9_ZW>u6|I~SEzDsI<>iW6%bEmNw6<@$5BMQdDcsV8eX3F@x!=P#ZT!$Uu zhFvJda}c0gB>yNw+|AZE77+aM!RS;((!xWnZN#SZDNeNK)dPfNeYaQ1a+-8GAa*q+ zT~oOmFYxoXs6Ybv#*9XhXA!voLl=f|LhV0bE+HBW)0mNWN&^^)e3nXKv^MNl@>{0b zZAWtV`fY&FtI)*k77XCaKm&82Pl;`m3seaB;AWjzUxVQ570`~EfdKBmdCHf}4H!g4`i&u~LRk!K=0X@+ z;)4{jPXV;#&iWbP7?s+>#KU22zRNHF2V_X+w&MSs$@!N*1a6y|i!l>`xx^4i$olbp zdJ2H>=>y@N%vmggMvT z)b(Oze?-$9!1RfMAHV1xn6?BW8b)P(!e@P;WlfV5KeV*T0Ex&=eZb0? zM3K<#Bfm(SC+0Zj=a(r~#tVf!Hzy;Xn)*B`Idyt!MwHNKy1HWFuHi+Cys|Hi=_Nd7 zB;Jk;3}Db0R5IB#p##mD4{6zr|MQuaI{fCXrfYH*Aae->@Z{@RZGMoG(8^-VEv#X{ zp@*~9*4F&oH^8o0lh`hoqL)s24+Uwx^qkkc*!!aG4+POS1lt~%ZRr$ldQMh+KKbxx z-Gi~lr{isxF10na{@L>-|Jqd1)u}(aNB7_TvFFZk_l2{szx=v8J^S+4?8uAPn#a#> zPtD%Gd#|IT^TDlKJwvl|_Q{IFZv*#eLXQt_s2*B#{DbeF4l`2FUhZrHMg|Z9z2+K^+V>FiOjQaii(s4*;~oNRHEZ1yi*$4YBiQ0 zgtrLOvRY1eN!%a{()KGM_#OV2!!$pU?zef3ZzSGOil>@kx$}wa1!M{z4^deptO1*4 zKs9rAazU|S0?WtBRAj>9nOF$S1&-7J#k|c|wYJ`8B|o%IY_{5T)hxM5Fa7ne+4nyt zKXVet^)epd68cHM4f59SE^Q@&O&gxOet++9gVWARELTG5QYea)b7RE_c%5rMi(F6}0e zt=2;(FZ>|^uNL5i($slt0itL|(O4sRw;#wrOEm}9E1)9WXHHyc%{@7rt^N3lOV{Gy z&52$kDVlD|%PSySqpxP=f(Jc)(k#s`wKXH>R7&2p>ZzJ|nqc;{GQJDwf4%tHE0U^Q zZ8)eCV3^GNsRm3uhH=T5^J0(`w@(gzAv}Z(myT9fK}B+65D5nx~-L{1~&d)o}N zE!i;3_NN67ILy1a3T$Zw)k57&`RWKv^7vuk1R(WKc#KIVk$Aev`8%@1J=MQ^c&o!B zN5)t%T_?;`mwdzK;{Lf{l~fPl`}G3Q$S1ZpVQGuT6bPf%N0vb}Ub{~USt;JXb_tJ) zbLRjm?-dn*8h!ZFQ5cKu5+Nq8ul6HV`Vt;(b3shpJtzx!d~ica_dXPOH5hqODyayQ zf~I}6D!}%|J+mr^@D`@%O~U}yFktrk^+;rpMWY-cCU>vFQ=6Zx1^aptZ9Odjv<}L` zDrkB`YBNc2aLfnKxCHZiY(?QD3UD^n1)z||py!yFs%dI0al0{f6aDHNSbziJ8(^F1 zC7CWMu(F?HMJ`+0ij#xT7X6n}BQHmNO!82%48e4{o(=X^TaI{R#=ujw zlglIkka-umYcr+Ia6ZP^G3P!Q2+O;||9}wNgEX`dFn?&=uodmyFnNeY-JHY&DimUI zz}aCO@PIOVZ4=>8)k&7%uW4coxE+|;SJvQho3?|wE!zsH64NFioo)M&x?(>i(KqPg z7bPL$lriV9&P$KH*2G|9MqMlMP=FFR|BnO7tDR>fUuDKxAJ=>dAt5`^0Giz!8?N1qIe+aeQMcW>|Y+R z8s#;)=01Hg5s(agmG8Z%e6Yu?MdhDELwK(~AiRP0Xt;y&|xAN zMU#~rc2wtv!Ja$LXUdJ!&N9y7jqykO0DwC;S^BsR+aB+~nCDPCY1y8?G`ibUYt5)! Qo7|7GeqiJeLBRa~1}?u^wEzGB literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/figures/drawModifier.png b/en/application-dev/reference/apis-arkui/arkui-ts/figures/drawModifier.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce15999035382a0b16b0a0480ffab4e36dff00c GIT binary patch literal 70190 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

1nMFC>WA~SNxaBW53bzq!sG2kT>|3>eK9q8(A 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 E52V%f^8f$< literal 0 HcmV?d00001 diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/figures/en-us_image_lazyvgridlayout1.png b/en/application-dev/reference/apis-arkui/arkui-ts/figures/en-us_image_lazyvgridlayout1.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d173eff21f1f63a237452f929fd28b6fea3ea4 GIT binary patch literal 37529 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 **NOTE** +> +> - This component is supported since API version 19. Updates will be marked with a superscript to indicate their earliest API version. +> - This component's height adapts to content by default. Setting the height, height constraints, or aspect ratio causes display anomalies. + +## APIs + +LazyVGridLayout() + +Creates a vertical lazy-loading grid layout container. + +**Atomic service API**: This API can be used in atomic services since API version 19. + +**System capability**: SystemCapability.ArkUI.ArkUI.Full + +## Attributes + +In addition to the [universal attributes](ts-component-general-attributes.md), the following attributes are supported. + +### columnsTemplate + +columnsTemplate(value: string) + +Sets the number of columns, fixed column width, or minimum column width of the grid. If this attribute is not set, one column will be used. + +For example, **'1fr 1fr 2fr'** indicates three columns, with the first column taking up 1/4 of the parent component's full width, the second column 1/4, and the third column 2/4. + +**columnsTemplate('repeat(auto-fit, track-size)')**: The layout automatically calculates the number of columns and the actual column width, while adhering to the minimum column width specified with **track-size**. + +**columnsTemplate('repeat(auto-fill, track-size)')**: The layout automatically calculates the number of columns based on the fixed column width specified with **track-size**. + +**columnsTemplate('repeat(auto-stretch, track-size)')**: The layout uses **columnsGap** to define the minimum gap between columns and automatically calculates the number of columns and the actual gap size based on the fixed column width specified with **track-size**. + +**repeat**, **auto-fit**, **auto-fill**, and **auto-stretch** are keywords. **track-size** indicates the column width, in the unit of px, vp (default), %, or any valid digit. The value must be greater than or equal to one valid column width.
+In **auto-stretch** mode, **track-size** must be a valid column width value, in the unit of px, vp, or any valid digit; percentage values (%) are not supported. + +If this attribute is set to **'0fr'**, the column width is 0, and child components are not displayed. If this attribute is set to an invalid value, the child components are displayed in a fixed column. + +**Atomic service API**: This API can be used in atomic services since API version 19. + +**System capability**: SystemCapability.ArkUI.ArkUI.Full + +**Parameters** + +| Name| Type | Mandatory| Description | +| ------ | ------ | ---- | ---------------------------------- | +| value | string | Yes | Number of columns or minimum column width of the grid.| + +### columnsGap + +columnsGap(value: LengthMetrics): T + +Sets the gap between columns. A value less than 0 evaluates to the default value. + +**Atomic service API**: This API can be used in atomic services since API version 19. + +**System capability**: SystemCapability.ArkUI.ArkUI.Full + +**Parameters** + +| Name| Type | Mandatory| Description | +| ------ | ---------------------------- | ---- | ---------------------------- | +| value | [LengthMetrics](../js-apis-arkui-graphics.md#lengthmetrics12) | Yes | Gap between columns.
Default value: **0vp**| + +**Return value** + +| Type| Description | +| --- | -------------- | +| T | Current component.| + +### rowsGap + +rowsGap(value: LengthMetrics): T + +Sets the gap between rows. A value less than 0 evaluates to the default value. + +**Atomic service API**: This API can be used in atomic services since API version 19. + +**System capability**: SystemCapability.ArkUI.ArkUI.Full + +**Parameters** + +| Name| Type | Mandatory| Description | +| ------ | ---------------------------- | ---- | ---------------------------- | +| value | [LengthMetrics](../js-apis-arkui-graphics.md#lengthmetrics12) | Yes | Gap between rows.
Default value: **0vp**| + +**Return value** + +| Type| Description | +| --- | -------------- | +| T | Current component.| + +## Events + +Only the [universal events](ts-component-general-events.md) are supported. + +## Example + +This example demonstrates how to implement a lazy-loading grid layout using the **WaterFlow** and **LazyVGridLayout** components. + + +```ts +import { LengthMetrics } from '@kit.ArkUI' +import { MyDataSource } from './MyDataSource' + +@Entry +@Component +struct LazyVGridLayoutSample1 { + private arr:MyDataSource = new MyDataSource(); + build() { + Column() { + WaterFlow() { + LazyVGridLayout() { + LazyForEach(this.arr, (item:number)=>{ + Text("item" + item.toString()) + .height(64) + .width("100%") + .borderRadius(5) + .backgroundColor(Color.White) + .textAlign(TextAlign.Center) + }) + } + .columnsTemplate("1fr 1fr") + .rowsGap(LengthMetrics.vp(10)) + .columnsGap(LengthMetrics.vp(10)) + }.padding(10) + } + .width('100%').height('100%') + .backgroundColor("#DCDCDC") + } + + aboutToAppear(): void { + for (let i = 0; i < 100; i++) { + this.arr.pushData(i); + } + } +} +``` + + +```ts +// MyDataSource.ets +export class BasicDataSource implements IDataSource { + private listeners: DataChangeListener[] = []; + protected dataArray: T[] = []; + + public totalCount(): number { + return this.dataArray.length; + } + + public getData(index: number): T { + return this.dataArray[index]; + } + + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + console.info('add listener'); + this.listeners.push(listener); + } + } + + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener); + if (pos >= 0) { + console.info('remove listener'); + this.listeners.splice(pos, 1); + } + } + + notifyDataReload(): void { + this.listeners.forEach(listener => { + listener.onDataReloaded(); + }) + } + + notifyDataAdd(index: number): void { + this.listeners.forEach(listener => { + listener.onDataAdd(index); + }) + } + + notifyDataChange(index: number): void { + this.listeners.forEach(listener => { + listener.onDataChange(index); + }) + } + + notifyDataDelete(index: number): void { + this.listeners.forEach(listener => { + listener.onDataDelete(index); + }) + } + + notifyDataMove(from: number, to: number): void { + this.listeners.forEach(listener => { + listener.onDataMove(from, to); + }) + } + + notifyDatasetChange(operations: DataOperation[]): void { + this.listeners.forEach(listener => { + listener.onDatasetChange(operations); + }) + } +} + +export class MyDataSource extends BasicDataSource { + public shiftData(): void { + this.dataArray.shift(); + this.notifyDataDelete(0); + } + public unshiftData(data: T): void { + this.dataArray.unshift(data); + this.notifyDataAdd(0); + } + public pushData(data: T): void { + this.dataArray.push(data); + this.notifyDataAdd(this.dataArray.length - 1); + } + public popData(): void { + this.dataArray.pop(); + this.notifyDataDelete(this.dataArray.length); + } + public clearData(): void { + this.dataArray = []; + this.notifyDataReload(); + } +} +``` + +![](figures/en-us_image_lazyvgridlayout1.png) diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-accessibility.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-accessibility.md index 6e2edb5fffe..75009f00af2 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-accessibility.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-accessibility.md @@ -1,10 +1,10 @@ # Accessibility -You can set accessibility attributes and events for components. +You can set accessibility attributes and events for components to fully leverage accessibility features. > **NOTE** > -> The APIs of this module are supported since API version 10. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 10. Updates will be marked with a superscript to indicate their earliest API version. ## accessibilityGroup @@ -12,7 +12,7 @@ accessibilityGroup(value: boolean) Sets whether to enable accessibility grouping. When accessibility grouping is enabled, the component and all its children are treated as a single selectable unit, and the accessibility service will no longer focus on the individual child components. -If accessibility grouping is enabled and the component does not contain a universal text attribute or an [accessibility text](#accessibilitytext) attribute, the system will concatenate the universal text attributes of its child components to form a merged text for the component. If a child component lacks a universal text attribute, it will be ignored in the concatenation process. The merged text will not use the accessibility text of the child components. +If accessibility grouping is enabled for a component that does not contain a universal text attribute or an [accessibility text](#accessibilitytext) attribute, the system will concatenate the universal text attributes of its child components to generate merged text for the component. Child components without universal text attributes will be ignored during concatenation, and their accessibility text (if any) won't be used in the merged text. **Widget capability**: This API can be used in ArkTS widgets since API version 12. @@ -24,17 +24,17 @@ If accessibility grouping is enabled and the component does not contain a univer | Name| Type | Mandatory| Description | | ------ | ------- | ---- | ------------------------------------------------------------ | -| value | boolean | Yes | Whether to enable accessibility grouping. When accessibility grouping is enabled, the component and all its children are treated as a single selectable unit, and the accessibility service will no longer focus on the individual child components.
Default value: **false**| +| value | boolean | Yes | Whether to enable accessibility grouping. The value **true** means to enable accessibility grouping, and **false** means the opposite. When accessibility grouping is enabled, the component and all its children are treated as a single selectable unit, and the accessibility service will no longer focus on the individual child components.
Default value: **false**| ## accessibilityGroup14+ accessibilityGroup(isGroup: boolean, accessibilityOptions: AccessibilityOptions) -Sets whether to enable accessibility grouping, with support for prioritizing the concatenation of accessibility text for accessibility announcement. When accessibility grouping is enabled, the component and all its children are treated as a single selectable entity, and the accessibility service will no longer focus on the individual child components. +Sets whether to enable accessibility grouping. When accessibility grouping is enabled, the component and all its children are treated as a single selectable unit, and the accessibility service will no longer focus on the individual child components. -If accessibility grouping is enabled and the component does not contain a universal text attribute or an [accessibility text](#accessibilitytext) attribute, the system will concatenate the universal text attributes of its child components to form a merged text for the component. If a child component lacks a universal text attribute, it will be ignored in the concatenation process. +If accessibility grouping is enabled for a component that does not contain a universal text attribute or an [accessibility text](#accessibilitytext) attribute, the system will concatenate the universal text attributes of its child components to generate merged text for the component. Child components without universal text attributes will be ignored during concatenation. -When **accessibilityPreferred** is set to **true**, the system will prioritize concatenating the accessibility text attributes of the child components to form the merged text. If a child component lacks an accessibility text attribute, the system will continue to concatenate its universal text attribute. If a child component lacks both, it will be ignored. +When **accessibilityPreferred** is set to **true**, the system will prioritize concatenating the accessibility text attributes of the child components. If a child component has no accessibility text set, its universal text attribute will be used instead. Components without either attribute will be excluded from concatenation. **Widget capability**: This API can be used in ArkTS widgets since API version 14. @@ -46,8 +46,8 @@ When **accessibilityPreferred** is set to **true**, the system will prioritize c | Name | Type | Mandatory| Description | | -------------------- | ------------------------------------------------------- | ---- | ------------------------------------------------------------ | -| isGroup | boolean | Yes | Whether to enable accessibility grouping. When accessibility grouping is enabled, the component and all its children are treated as a single selectable unit, and the accessibility service will no longer focus on the individual child components.
Default value: **false**| -| accessibilityOptions | [AccessibilityOptions](#accessibilityoptions14) | Yes | Options for accessibility grouping. When **accessibilityPreferred** is set to **true**, the system will prioritize concatenating the accessibility text attributes of the child components to form the merged text.
Default value: **false** | +| isGroup | boolean | Yes | Whether to enable accessibility grouping. The value **true** means to enable accessibility grouping, and **false** means the opposite. When accessibility grouping is enabled, the component and all its children are treated as a single selectable unit, and the accessibility service will no longer focus on the individual child components.
Default value: **false**| +| accessibilityOptions | [AccessibilityOptions](#accessibilityoptions14) | Yes | Options for accessibility grouping. When **accessibilityPreferred** is set to **true**, the system will prioritize concatenating accessibility text for screen readers. When **accessibilityPreferred** is set to **false**, accessibility text will not be prioritized.
Default value: **false** | ## AccessibilityOptions14+ @@ -55,7 +55,7 @@ When **accessibilityPreferred** is set to **true**, the system will prioritize c | Name | Type | Mandatory| Description | | ---------------------- | ------- | ---- | ------------------------------------------------------------ | -| accessibilityPreferred | boolean | No | Whether to prioritize the accessibility text of child components during a deep traversal. The value **true** means to prioritize the accessibility text of child components.
If a child component's accessibility text is empty, the accessibility service uses the component's own text content. The concatenated text is then assigned to the parent node if both its accessibility text and text content are empty.
Default value: **false**| +| accessibilityPreferred | boolean | No | Whether to prioritize the accessibility text of child components during a deep traversal. The value **true** means to prioritize the accessibility text of child components.
If a child component's accessibility text is empty, the accessibility service uses the component's own text content. The concatenated text is then assigned to the parent node if both its accessibility text and text content are empty.
The value **false** means not to prioritize the accessibility text of child components.
Default value: **false**| ## accessibilityText @@ -170,7 +170,7 @@ Sets an accessibility virtual child node. For custom drawing components, a **Cus accessibilityChecked(isCheck: boolean) -Sets the checked state of the accessibility component. This property is used in multi-select scenarios. +Sets the checked state of the accessibility component. This property is used in multiselect scenarios. **Widget capability**: This API can be used in ArkTS widgets since API version 13. @@ -182,7 +182,7 @@ Sets the checked state of the accessibility component. This property is used in | Name | Type | Mandatory| Description | | ------- | ------- | ---- | ------------------------------------------------------------ | -| isCheck | boolean | Yes | Whether the current component is selected.
The options are as follows:
**true**: The component is selected.
**false**: The component is not selected.
**undefined**: The component determines its own selected state.
Default value: **undefined**
**NOTE**
1. Setting this parameter to **true** or **false** will automatically set the component's **checkable** attribute to **true**.
2. When this parameter is set to **true** or **false**, to use it with **accessibilitySelected**, set the **accessibilitySelected** parameter to **undefined**.| +| isCheck | boolean | Yes | Whether the current component is selected.
The options are as follows:
**true**: The component is selected.
**false**: The component is not selected.
**undefined**: The component determines its own selected state.
Default value: **undefined**.
**NOTE**
1. Setting this parameter to **true** or **false** will automatically set the component's **checkable** attribute to **true**.
2. When this parameter is set to **true** or **false**, to use it with **accessibilitySelected**, set the **accessibilitySelected** parameter to **undefined**.| ## accessibilitySelected13+ @@ -200,7 +200,7 @@ Sets the selected state of the accessibility component. This property is used in | Name | Type | Mandatory| Description | | -------- | ------- | ---- | ------------------------------------------------------------ | -| isSelect | boolean | Yes | Whether the current component is selected.
The options are as follows:
**true**: The component is selected.
**false**: The component is not selected.
**undefined**: The component determines its own selected state.
Default value: **undefined**
**NOTE**
1. When this parameter is set to **true** or **false**, to use it with **accessibilityChecked**, set the **accessibilityChecked** parameter to **undefined**.| +| isSelect | boolean | Yes | Whether the current component is selected.
The options are as follows:
**true**: The component is selected.
**false**: The component is not selected.
**undefined**: The component determines its own selected state.
Default value: **undefined**.
**NOTE**
1. When this parameter is set to **true** or **false**, to use it with **accessibilityChecked**, set the **accessibilityChecked** parameter to **undefined**.| ## accessibilityRole18+ @@ -430,7 +430,7 @@ Sets whether the component is the default initial focus for screen readers on th accessibilityUseSamePage(pageMode: AccessibilitySamePageMode) -Solves focus jumping issues in sub-tree scenarios like UIExtensionComponent. Sets the same-page mode for this UIExtensionComponent and the host application. This property is intended to solve focus jumping issues in sub-tree scenarios. Due to the timing of page events sent by the UIExtensionComponent and the host application, focus may jump from one component to another, causing "focus jumping." +Solves focus jumping issues in sub-tree scenarios for cross-process embedded components, such as **UIExtensionComponent**. Focus jumping occurs when the timing of page events from the embedded component's process conflicts with those of the host application, causing focus to unexpectedly shift between components. **Widget capability**: This API can be used in ArkTS widgets since API version 18. @@ -442,11 +442,11 @@ Solves focus jumping issues in sub-tree scenarios like UIExtensionComponent. Set | Name | Type | Mandatory| Description | | -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------ | -| pageMode | [AccessibilitySamePageMode](#accessibilitysamepagemode18) | Yes | Same-page mode for the current UIExtensionComponent and the host application.| +| pageMode | [AccessibilitySamePageMode](#accessibilitysamepagemode18) | Yes | Same-page mode for the cross-process embedded component and the host application.| ## AccessibilitySamePageMode18+ -Enumerates the same-page modes for the current UIExtensionComponent and the host application. +Enumerates the same-page modes for cross-process embedded components and their host applications. **Atomic service API**: This API can be used in atomic services since API version 18. @@ -454,8 +454,8 @@ Enumerates the same-page modes for the current UIExtensionComponent and the host | Name | Value | Description | | ----------- | ---- | ------------------------------------------------------------ | -| SEMI_SILENT | 0 | Ignores page events sent by the root node of the UIExtensionComponent page or during the initial page load.| -| FULL_SILENT | 1 | Ignores all page events in the UIExtensionComponent. | +| SEMI_SILENT | 0 | Ignores initial page loading events and root node page events from the cross-process embedded component.| +| FULL_SILENT | 1 | Ignores all page events from the cross-process embedded component. | ## accessibilityScrollTriggerable18+ @@ -473,7 +473,7 @@ Sets whether to enable automatic scrolling for screen readers when the current p | Name | Type | Mandatory| Description | | -------------- | ------- | ---- | ------------------------------------------------------------ | -| isTriggerable | boolean | Yes | Whether the component supports automatic scrolling for screen readers when the current page has no focusable components.
The options are as follows:
**true**: The component triggers automatic scrolling for screen readers when the current page has no focusable components.
**false**: The component does not trigger automatic scrolling for screen readers when the current page has no focusable components.
**undefined**: The default settings are restored.
Default value: **true**
**NOTE**
1. This parameter does not affect the original **scrollable** attribute of the component.
2. The final scrolling behavior is determined by the screen reader based on this parameter and whether the component supports scrolling.
3. This API applies to all basic components. It is recommended for scrollable components, including **List**, **Grid**, **Scroll**, **Waterflow**, and **Swiper**.| +| isTriggerable | boolean | Yes | Whether the component supports automatic scrolling for screen readers when the current page has no focusable components.
The options are as follows:
**true**: The component triggers automatic scrolling for screen readers when the current page has no focusable components.
**false**: The component does not trigger automatic scrolling for screen readers when the current page has no focusable components.
**undefined**: The default settings are restored.
Default value: **true**
**NOTE**
1. This parameter does not affect the original **scrollable** attribute of the component.
2. The final scrolling behavior is determined by the screen reader based on this parameter and whether the component supports scrolling.
3. This API applies to all basic components. It is recommended for scrollable components, including **List**, **Grid**, **Scroll**, and **WaterFlow**.| ## accessibilityTextHint12+ @@ -527,7 +527,7 @@ struct Index { .accessibilityGroup(true) .accessibilityLevel("yes") .accessibilityText("Group") // If a component has both text content and accessibility text, only the accessibility text is announced. - .accessibilityDescription("The Column component is selectable , and the text to be read out is "Group".) + .accessibilityDescription("The Column component can be selected, and the announced content is 'Group'") .accessibilityVirtualNode(this.customAccessibilityNode) .accessibilityChecked(true) .accessibilitySelected(undefined) @@ -567,3 +567,181 @@ struct Focus { } ``` +### Example 3: Setting the Initial Focus and the Next Focus of a Component + +This example demonstrates the use of **accessibilityDefaultFocus** to set the default initial focus for the screen reader on the current page and **accessibilityNextFocusId** to set the next focus for components during focus traversal. + +```ts +// xxx.ets +@Entry +@Component +struct Index { + build() { + Column({ space: 20 }) { + Text('Text Demo 1') + .fontSize(50) + .accessibilityLevel('yes') + .accessibilityNextFocusId('text3') + Text('Text Demo 2') + .id('text2') + .fontSize(50) + .accessibilityLevel('yes') + .accessibilityDefaultFocus(true) // Set the component as initial focus for the screen reader. + .accessibilityNextFocusId('text4') + Text('Text Demo 3') + .id('text3') + .fontSize(50) + .accessibilityLevel('yes') + .accessibilityNextFocusId('text2') + Text('Text Demo 4') + .id('text4') + .fontSize(50) + .accessibilityLevel('yes') + } + .height('100%') + .width('100%') + } +} +``` + +### Example 4: Setting the Accessibility Component Type and Text Hint + +This example demonstrates the use of **accessibilityRole** to set the accessibility component type and **accessibilityTextHint** to provide text hints for components that can be queried by assistive technologies. + +```ts +// xxx.ets +@Entry +@Component +struct Index { + @State isDownloading: boolean = false; + @State hintStr: string = 'Click to start download'; + + build() { + Column({ space: 20 }) { + Button(this.isDownloading ? 'Downloading' : 'Click to download') + .accessibilityLevel('yes') + .accessibilityTextHint(this.hintStr) + .onClick(() => { + this.isDownloading = !this.isDownloading; + this.hintStr = this.isDownloading ? 'Status changed to downloading' : 'Status changed to paused'; + }) + TextInput({ placeholder: 'Enter phone number' }) + .accessibilityLevel('yes') + .accessibilityTextHint('Enter an 11-digit phone number') + .width('80%') + Text('Announced as button type') + .accessibilityLevel('yes') + .accessibilityRole(AccessibilityRoleType.BUTTON) + .accessibilityTextHint('The screen reader will announce this component as a button') + .fontSize(30) + } + .height('100%') + .width('100%') + } +} +``` + +### Example 5: Configuring Screen Reader Scrolling and Cross-Process Focus + +This example demonstrates the use of **accessibilityScrollTriggerable** to set whether an accessibility node supports screen reading scroll and **accessibilityUseSamePage** for cross-process embedded components like **EmbeddedComponent**. + +```ts +// xxx.ets +import { Want } from '@kit.AbilityKit'; + +@Entry +@Component +struct Index { + @State message: string = 'Message: '; + private want: Want = { + bundleName: 'com.example.embeddeddemo', + abilityName: 'ExampleEmbeddedAbility', + } + + build() { + Row() { + List() { + ListItem() { + Column() { + Text(this.message) + .fontSize(18) + .fontColor('#2D2D2D') + .fontWeight(FontWeight.Medium) + Column() { + EmbeddedComponent(this.want, EmbeddedType.EMBEDDED_UI_EXTENSION) + .width('100%') + .height('90%') + .onTerminated((info) => { + this.message = 'Termination: code = ' + info.code + ', want = ' + JSON.stringify(info.want); + }) + .onError((error) => { + this.message = 'Error: code = ' + error.code; + }) + .accessibilityUseSamePage(AccessibilitySamePageMode.FULL_SILENT) + .width('90%') + .height('50%') + .backgroundColor('#F0F0F0') + .borderRadius(8) + .borderWidth(1) + .borderColor('#D9D9D9') + + Stack() { + Column() { + Text('Text 1') + .fontSize(18) + .fontColor('#2D2D2D') + .fontWeight(FontWeight.Medium) + Text('Text 1') + .fontSize(18) + .fontColor('#2D2D2D') + .fontWeight(FontWeight.Medium) + } + .padding({ top: 8, bottom: 8 }) + + Column() { + Text('Text 2') + .fontSize(18) + .fontColor('#FFFFFF') + .fontWeight(FontWeight.Medium) + Text('Text 2') + .fontSize(18) + .fontColor('#FFFFFF') + .fontWeight(FontWeight.Medium) + } + .backgroundColor('#4A90E2') + .padding({ + left: 12, + right: 12, + top: 10, + bottom: 10 + }) + .borderRadius(6) + } + .width('100%') + .margin({ top: 10, bottom: 10 }) + } + .width('100%') + .height('100%') + .margin({ top: 15 }) + .accessibilityText($r('app.string.app_name')) + .accessibilityDescription($r('app.string.module_desc')) + Column() { + Text('Text 4') + .fontSize(18) + .fontWeight(FontWeight.Medium) + } + .margin({ top: 15 }) + } + .width('100%') + } + } + .accessibilityScrollTriggerable(false) + .width('100%') + } + .height('100%') + .backgroundColor('#F7F9FC') + } +} +``` + +![accessibilityUseSamePage](figures/accessibilityUseSamePage.png) diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-attribute-modifier.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-attribute-modifier.md index c6f432f7b2e..50c21e937e8 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-attribute-modifier.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-attribute-modifier.md @@ -12,7 +12,7 @@ With the attribute modifier, you can dynamically set component attributes, compl ## attributeModifier -attributeModifier(modifier: AttributeModifier\) +attributeModifier(modifier: AttributeModifier\): T Creates an attribute modifier. @@ -24,7 +24,13 @@ Creates an attribute modifier. | Name | Type | Mandatory| Description | | -------- | -------------------------------------------- | ---- | -------------------------------------------------------------------------------------------------------------------------------- | -| modifier | [AttributeModifier\](#attributemodifiert) | Yes | Modifier for dynamically setting attributes on the current component. The **if/else** syntax is supported.
**modifier**: attribute modifier. You need a custom class to implement the **AttributeModifier** API.| +| modifier | [AttributeModifier\](#attributemodifiert) | Yes | Modifier for dynamically setting attributes on the current component. The **if/else** syntax is supported.
**modifier**: attribute modifier. You need to customize classes to implement the **AttributeModifier** API.| + +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| ## AttributeModifier\ @@ -121,7 +127,7 @@ CommonModifier, ColumnModifier, ColumnSplitModifier, RowModifier, RowSplitModifi 2. Updating the attribute value of a custom modifier changes the corresponding attribute of the component to which the modifier is applied. The custom modifier is a base class, and the constructed object is a child class object. When using the object, use **as** to assert the type as a child class. 3. With a custom modifier applied to two components, updating the attribute value of the custom modifier changes the corresponding attributes of both components. 4. If attributes A and B are set through a custom modifier, and then attributes C and D are set through other means, all the four attributes take effect on the component. -5. The custom modifier does not support change observation for @State decorated variables. For details, see Example 2. +5. Custom modifiers do not support change detection of state data decorated with @State. For details, see [Example 3: Understanding Custom Modifiers Do Not Support State Data Changes)](#example-3-understanding-custom-modifiers-do-not-support-state-data-changes). 6. If you use **attributeModifier** to set attributes multiple times, all the set attributes take effect, and those attributes that are set multiple times take effect based on the configuration sequence. ## Example @@ -132,13 +138,13 @@ This example demonstrates how to switch the background color of a **Button** com ```ts // xxx.ets class MyButtonModifier implements AttributeModifier { - isDark: boolean = false + public isDark: boolean = false; applyNormalAttribute(instance: ButtonAttribute): void { if (this.isDark) { - instance.backgroundColor(Color.Black) + instance.backgroundColor(Color.Black); } else { - instance.backgroundColor(Color.Red) + instance.backgroundColor(Color.Red); } } } @@ -146,7 +152,7 @@ class MyButtonModifier implements AttributeModifier { @Entry @Component struct attributeDemo { - @State modifier: MyButtonModifier = new MyButtonModifier() + @State modifier: MyButtonModifier = new MyButtonModifier(); build() { Row() { @@ -154,7 +160,7 @@ struct attributeDemo { Button("Button") .attributeModifier(this.modifier) .onClick(() => { - this.modifier.isDark = !this.modifier.isDark + this.modifier.isDark = !this.modifier.isDark; }) } .width('100%') @@ -173,18 +179,18 @@ This example demonstrates how to implement a pressed state effect for a **Button // xxx.ets class MyButtonModifier implements AttributeModifier { applyNormalAttribute(instance: ButtonAttribute): void { - instance.backgroundColor(Color.Black) + instance.backgroundColor(Color.Black); } applyPressedAttribute(instance: ButtonAttribute): void { - instance.backgroundColor(Color.Red) + instance.backgroundColor(Color.Red); } } @Entry @Component struct attributePressedDemo { - @State modifier: MyButtonModifier = new MyButtonModifier() + @State modifier: MyButtonModifier = new MyButtonModifier(); build() { Row() { @@ -205,7 +211,7 @@ struct attributePressedDemo { This example shows how to set the width of a custom modifier using state data. Custom modifiers do not support observing changes in data decorated with the @State decorator. Therefore, the width does not change when the button is clicked. ```ts -import { CommonModifier } from "@kit.ArkUI" +import { CommonModifier } from "@kit.ArkUI"; const TEST_TAG : string = "AttributeModifier"; class MyModifier extends CommonModifier { @@ -216,7 +222,7 @@ class MyModifier extends CommonModifier { @Component struct MyImage1 { - @Link modifier: CommonModifier + @Link modifier: CommonModifier; build() { Image($r("app.media.startIcon")).attributeModifier(this.modifier as MyModifier) @@ -229,21 +235,21 @@ struct Index { index: number = 0; @State width1: number = 100; @State height1: number = 100; - @State myModifier: CommonModifier = new MyModifier().width(this.width1).height(this.height1).margin(10) + @State myModifier: CommonModifier = new MyModifier().width(this.width1).height(this.height1).margin(10); build() { Column() { Button($r("app.string.EntryAbility_label")) .margin(10) .onClick(() => { - console.log(TEST_TAG, "onClick") + console.log(TEST_TAG, "onClick"); this.index++; if (this.index % 2 === 1) { this.width1 = 10; - console.log(TEST_TAG, "setGroup1") + console.log(TEST_TAG, "setGroup1"); } else { this.width1 = 10; - console.log(TEST_TAG, "setGroup2") + console.log(TEST_TAG, "setGroup2"); } }) MyImage1({ modifier: this.myModifier }) @@ -259,7 +265,7 @@ struct Index { In this example, the custom modifier sets the **width** and **height** attributes, and the **borderStyle** and **borderWidth** attributes are set through a button click. In this case, all the four attributes take effect when the button is clicked. ```ts -import { CommonModifier } from "@kit.ArkUI" +import { CommonModifier } from "@kit.ArkUI"; const TEST_TAG: string = "AttributeModifier"; @@ -269,19 +275,19 @@ class MyModifier extends CommonModifier { } public setGroup1(): void { - this.borderStyle(BorderStyle.Dotted) - this.borderWidth(8) + this.borderStyle(BorderStyle.Dotted); + this.borderWidth(8); } public setGroup2(): void { - this.borderStyle(BorderStyle.Dashed) - this.borderWidth(8) + this.borderStyle(BorderStyle.Dashed); + this.borderWidth(8); } } @Component struct MyImage1 { - @Link modifier: CommonModifier + @Link modifier: CommonModifier; build() { Image($r("app.media.startIcon")).attributeModifier(this.modifier as MyModifier) @@ -291,7 +297,7 @@ struct MyImage1 { @Entry @Component struct Index { - @State myModifier: CommonModifier = new MyModifier().width(100).height(100).margin(10) + @State myModifier: CommonModifier = new MyModifier().width(100).height(100).margin(10); index: number = 0; build() { @@ -299,14 +305,14 @@ struct Index { Button($r("app.string.EntryAbility_label")) .margin(10) .onClick(() => { - console.log(TEST_TAG, "onClick") + console.log(TEST_TAG, "onClick"); this.index++; if (this.index % 2 === 1) { - (this.myModifier as MyModifier).setGroup1() - console.log(TEST_TAG, "setGroup1") + (this.myModifier as MyModifier).setGroup1(); + console.log(TEST_TAG, "setGroup1"); } else { - (this.myModifier as MyModifier).setGroup2() - console.log(TEST_TAG, "setGroup2") + (this.myModifier as MyModifier).setGroup2(); + console.log(TEST_TAG, "setGroup2"); } }) MyImage1({ modifier: this.myModifier }) @@ -317,6 +323,131 @@ struct Index { ``` ![attributeModifier](figures/attributeModifier.gif) +### Example 5: Setting the Focused State Style with a Modifier + +This example demonstrates how to implement a focused state style for a **Button** component by binding it to a modifier. After **Button2** is clicked, the **Button** component displays the focused style when it has focus. + +```ts +class MyButtonModifier implements AttributeModifier { + + applyNormalAttribute(instance: ButtonAttribute): void { + instance.backgroundColor(Color.Blue); + } + applyFocusedAttribute(instance: ButtonAttribute): void { + instance.backgroundColor(Color.Green); + } +} + +@Entry +@Component +struct attributeDemo { + @State modifier: MyButtonModifier = new MyButtonModifier(); + @State isDisable: boolean = true; + + build() { + Row() { + Column() { + Button("Button") + .attributeModifier(this.modifier) + .enabled(this.isDisable) + .id("app") + Divider().vertical(false).strokeWidth(15).color(Color.Transparent) + Button("Button2") + .onClick(() => { + this.getUIContext().getFocusController().activate(true); + this.getUIContext().getFocusController().requestFocus("app"); + }) + } + .width('100%') + } + .height('100%') + } +} +``` +![applyFocusedAttribute](figures/applyFocusedAttribute.gif) + +### Example 6: Setting the Disabled State Style with a Modifier + +This example demonstrates how to implement a disabled state style for a **Button** component by binding it to a modifier. After **Button2** is clicked, the **Button** component displays the disabled style when it is disabled. + +```ts +class MyButtonModifier implements AttributeModifier { + applyDisabledAttribute(instance: ButtonAttribute): void { + instance.width(200); + } +} + +@Entry +@Component +struct attributeDemo { + @State modifier: MyButtonModifier = new MyButtonModifier(); + @State isDisable: boolean = true; + + build() { + Row() { + Column() { + Button("Button") + .attributeModifier(this.modifier) + .enabled(this.isDisable) + Divider().vertical(false).strokeWidth(15).color(Color.Transparent) + Button("Button2") + .onClick(() => { + this.isDisable = !this.isDisable; + }) + } + .width('100%') + } + .height('100%') + } +} +``` +![applyDisabledAttribute](figures/applyDisabledAttribute.gif) + +### Example 7: Setting the Selected State Style with a Modifier + +This example demonstrates how to implement a selected state style for a **Radio** component by binding it to a modifier. + +```ts +class MyRadioModifier implements AttributeModifier { + applyNormalAttribute(instance: RadioAttribute): void { + instance.backgroundColor(Color.Blue); + } + applySelectedAttribute(instance: RadioAttribute): void { + instance.backgroundColor(Color.Red); + instance.borderWidth(2); + } +} + +@Entry +@Component +struct attributeDemo { + @State modifier: MyRadioModifier = new MyRadioModifier(); + @State value: boolean = false; + @State value2: boolean = false; + + build() { + Row() { + Column() { + Radio({ value: 'Radio1', group: 'radioGroup1' }) + .checked(this.value) + .height(50) + .width(50) + .borderWidth(0) + .borderRadius(30) + .onClick(() => { + this.value = !this.value; + }) + .attributeModifier(this.modifier) + } + .width('100%') + } + .height('100%') + } +} +``` +![applySelectedAttribute](figures/applySelectedAttribute.gif) + + ## Supported Scope of Attributes Attributes not listed in the table below are supported by default. diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-content-modifier.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-content-modifier.md index 9d758d2a57b..c36a9992460 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-content-modifier.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-content-modifier.md @@ -2,13 +2,13 @@ You can apply a content modifier to a component to customize its content area using a style builder. -> **NOTE** +> **NOTE** > -> This feature is supported since API version 12. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 12. Updates will be marked with a superscript to indicate their earliest API version. ## contentModifier -contentModifier(modifier:ContentModifier\) +contentModifier(modifier: ContentModifier\): T Creates a content modifier. @@ -16,9 +16,15 @@ Creates a content modifier. **Parameters** -| Name | Type | Mandatory | Description | +| Name | Type | Mandatory| Description | | -------- | ------------------ | ---- | ------------------------------------------------------------ | -| modifier | ContentModifier\ | Yes | Content modifier to apply to the current component.
**modifier**: content modifier. You need a custom class to implement the **ContentModifier** API. | +| modifier | ContentModifier\ | Yes | Content modifier to apply to the current component.
**modifier**: content modifier. You need a custom class to implement the **ContentModifier** API.| + +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| ## ContentModifier\ @@ -26,7 +32,7 @@ You need a custom class to implement the **ContentModifier** API. ### applyContent -applyContent() : WrappedBuilder<[T]> +applyContent(): WrappedBuilder<[T]> Builder of the custom content area. @@ -36,9 +42,9 @@ Builder of the custom content area. **Parameters** -| Name | Description | +| Name| Description | | ---- | ------------------------------------------------------------ | -| T | Component attribute class, which is used to distinguish different information required by different components after content areas are customized, for example, **ButtonConfiguration** for the **Button** component and **CheckBoxConfiguration** of the **Checkbox** component. | +| T | Component attribute class, which is used to distinguish different information required by different components after content areas are customized, for example, **ButtonConfiguration** for the **Button** component and **CheckBoxConfiguration** of the **Checkbox** component.| **Value range of the T parameter:** @@ -68,21 +74,21 @@ This example demonstrates how to create a custom check box using **ContentModifi ```ts // xxx.ets class MyCheckboxStyle implements ContentModifier { - selectedColor: Color = Color.White + selectedColor: Color = Color.White; constructor(selectedColor: Color) { this.selectedColor = selectedColor; } applyContent(): WrappedBuilder<[CheckBoxConfiguration]> { - return wrapBuilder(buildCheckbox) + return wrapBuilder(buildCheckbox); } } @Builder function buildCheckbox(config: CheckBoxConfiguration) { Column({ space: 10 }) { - Text(config.name + (config.selected ? "(Selected)" : "(Not selected)")) + Text(config.name + (config.selected ? "(Selected)" : ""(Not selected)")) Shape() { // Pentagon check box style Path() @@ -114,9 +120,9 @@ function buildCheckbox(config: CheckBoxConfiguration) { .onClick(() => { // Trigger the check box state change upon click. if (config.selected) { - config.triggerChange(false) + config.triggerChange(false); } else { - config.triggerChange(true) + config.triggerChange(true); } }) .margin({ left: 150 }) @@ -133,7 +139,7 @@ struct Index { .select(true) .contentModifier(new MyCheckboxStyle(Color.Red)) .onChange((value: boolean) => { - console.info('Checkbox change is' + value) + console.info('Checkbox change is' + value); }) } .width('100%') diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-custom-property.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-custom-property.md index 795df1346ef..0fd9c588f97 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-custom-property.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-custom-property.md @@ -8,7 +8,7 @@ You can set custom properties on components. These custom properties can be obta ## customProperty -customProperty(name: string, value: Optional\) +customProperty(name: string, value: Optional\): T Sets a custom property for this component. This API does not work for [custom components](../../../ui/state-management/arkts-create-custom-components.md#creating-a-custom-component). @@ -18,12 +18,18 @@ Sets a custom property for this component. This API does not work for [custom co **System capability**: SystemCapability.ArkUI.ArkUI.Full -**Parameters** +**Parameters** -| Name | Type | Mandatory | Description | +| Name| Type | Mandatory| Description | | ------ | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | -| name | string | Yes | Name of the custom property. | -| value | Optional\ | Yes | Value of the custom property. | +| name | string | Yes | Name of the custom property.| +| value | Optional\ | Yes | Value of the custom property.| + +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| ## Optional12+ diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md new file mode 100644 index 00000000000..329425ba864 --- /dev/null +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-drag-sorting.md @@ -0,0 +1,81 @@ +# Drag-and-Drop Sorting + +By using **ForEach**, **LazyForEach**, or **Repeat** within a **List** component and setting up the **onMove** event, you can implement drag-and-drop sorting. When the drag-and-drop gesture is released, if any item's position changes, the **onMove** event is triggered, which reports the original index and target index of the relocated item. In the **onMove** event, the data source must be updated based on the reported start index and target index. Ensure that only the order of the data changes so that the drop animation can be executed properly. + +> **NOTE** +> +> The initial APIs of this module are supported since API version 12. Updates will be marked with a superscript to indicate their earliest API version. + +## onMove + +onMove(handler: Optional\) + +Invoked when data is moved during drag-and-drop sorting. This callback is effective only when the parent container component is [List](./ts-container-list.md) and each iteration of **ForEach**, **LazyForEach**, or **Repeat** generates a **ListItem** component. It allows you to define custom drag actions and handle various drag events. + +**Atomic service API**: This API can be used in atomic services since API version 12. + +**System capability**: SystemCapability.ArkUI.ArkUI.Full + +**Parameters** + +| Name| Type | Mandatory| Description | +| ------ | --------- | ---- | ---------- | +| handler | Optional\<[OnMoveHandler](#onmovehandler)\> | Yes | Drag operation.| + +## OnMoveHandler + +type OnMoveHandler = (from: number, to: number) => void; + +Defines the callback triggered when data is moved during drag-and-drop sorting. + +**Atomic service API**: This API can be used in atomic services since API version 12. + +**System capability**: SystemCapability.ArkUI.ArkUI.Full + +**Parameters** + +| Name| Type | Mandatory| Description | +| ------ | --------- | ---- | ---------- | +| from | number | Yes | Start index of the drag operation. The value range is [0, data source length - 1].| +| to | number | Yes | End index of the drag operation. The value range is [0, data source length - 1].| + +## Example + +This example demonstrates how to use **onMove** for drag and drop with **ForEach** in a **List** component. + +```ts +@Entry +@Component +struct ForEachSort { + @State arr: Array = []; + + build() { + Row() { + List() { + ForEach(this.arr, (item: string) => { + ListItem() { + Text(item.toString()) + .fontSize(16) + .textAlign(TextAlign.Center) + .size({height: 100, width: '100%'}) + }.margin(10) + .borderRadius(10) + .backgroundColor('#FFFFFFFF') + }, (item: string) => item) + .onMove((from:number, to:number) => { + let tmp = this.arr.splice(from, 1); + this.arr.splice(to, 0, tmp[0]); + }) + } + .width('100%') + .height('100%') + .backgroundColor('#FFDCDCDC') + } + } + aboutToAppear(): void { + for (let i = 0; i < 100; i++) { + this.arr.push(i.toString()); + } + } +} +``` diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-draw-modifier.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-draw-modifier.md index 250110aadd4..480510eb774 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-draw-modifier.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-draw-modifier.md @@ -4,11 +4,11 @@ If the drawn content of some components does not meet the requirements, you can > **NOTE** > -> This feature is supported since API version 12. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 12. Updates will be marked with a superscript to indicate their earliest API version. ## drawModifier -drawModifier(modifier: DrawModifier | undefined) +drawModifier(modifier: DrawModifier | undefined): T Creates a drawing modifier. @@ -26,6 +26,12 @@ AlphabetIndexer, Badge, Blank, Button, CalendarPicker, Checkbox, CheckboxGroup, | ------ | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | | modifier | [DrawModifier](#drawmodifier-1) \| undefined | Yes | Custom drawing modifier, which defines the logic of custom drawing.
Default value: **undefined**
**NOTE**
A custom modifier applies only to the FrameNode of the currently bound component, not to its subnodes.| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + ## DrawModifier Implements a **DrawModifier** instance for using the **drawFront**, **drawContent**, and **drawBehind** methods for custom drawing as well as the **invalidate** method for redrawing. Each **DrawModifier** instance can be set for only one component. Repeated setting is not allowed. @@ -38,7 +44,7 @@ Implements a **DrawModifier** instance for using the **drawFront**, **drawConten drawFront?(drawContext: DrawContext): void -Draws the foreground. This method can be overloaded for custom foreground drawing. +Draws the content foreground. Override this method to implement custom content foreground drawing. **Atomic service API**: This API can be used in atomic services since API version 12. @@ -54,7 +60,7 @@ Draws the foreground. This method can be overloaded for custom foreground drawin drawContent?(drawContext: DrawContext): void -Draws the content. This method can be overloaded for custom content drawing. The overloaded method will replace the original content drawing function of the component. +Draws the content. Override this method to implement custom content drawing, which will replace the component's default content drawing function. **Atomic service API**: This API can be used in atomic services since API version 12. @@ -70,7 +76,7 @@ Draws the content. This method can be overloaded for custom content drawing. The drawBehind?(drawContext: DrawContext): void -Draws the background. This method can be overloaded for custom background drawing. +Draws the background. Override this method to implement custom background drawing. **Atomic service API**: This API can be used in atomic services since API version 12. @@ -95,7 +101,7 @@ Triggers redrawing of the bound component. No overloading is allowed or needed. ## Example -This example shows how to customize the drawing of a **Text** component using **DrawModifier**. +This example shows how to implement custom drawing for a **Text** component using **DrawModifier**. ```ts // xxx.ets @@ -105,6 +111,12 @@ import { AnimatorResult } from '@kit.ArkUI'; class MyFullDrawModifier extends DrawModifier { public scaleX: number = 1; public scaleY: number = 1; + uiContext: UIContext; + + constructor(uiContext: UIContext) { + super(); + this.uiContext = uiContext; + } drawBehind(context: DrawContext): void { const brush = new drawing.Brush(); @@ -118,10 +130,10 @@ class MyFullDrawModifier extends DrawModifier { const halfWidth = context.size.width / 2; const halfHeight = context.size.width / 2; context.canvas.drawRect({ - left: vp2px(halfWidth - 50 * this.scaleX), - top: vp2px(halfHeight - 50 * this.scaleY), - right: vp2px(halfWidth + 50 * this.scaleX), - bottom: vp2px(halfHeight + 50 * this.scaleY) + left: this.uiContext.vp2px(halfWidth - 50 * this.scaleX), + top: this.uiContext.vp2px(halfHeight - 50 * this.scaleY), + right: this.uiContext.vp2px(halfWidth + 50 * this.scaleX), + bottom: this.uiContext.vp2px(halfHeight + 50 * this.scaleY) }); } @@ -137,10 +149,10 @@ class MyFullDrawModifier extends DrawModifier { const halfWidth = context.size.width / 2; const halfHeight = context.size.width / 2; context.canvas.drawRect({ - left: vp2px(halfWidth - 30 * this.scaleX), - top: vp2px(halfHeight - 30 * this.scaleY), - right: vp2px(halfWidth + 30 * this.scaleX), - bottom: vp2px(halfHeight + 30 * this.scaleY) + left: this.uiContext.vp2px(halfWidth - 30 * this.scaleX), + top: this.uiContext.vp2px(halfHeight - 30 * this.scaleY), + right: this.uiContext.vp2px(halfWidth + 30 * this.scaleX), + bottom: this.uiContext.vp2px(halfHeight + 30 * this.scaleY) }); } @@ -156,13 +168,19 @@ class MyFullDrawModifier extends DrawModifier { const halfWidth = context.size.width / 2; const halfHeight = context.size.width / 2; const radiusScale = (this.scaleX + this.scaleY) / 2; - context.canvas.drawCircle(vp2px(halfWidth), vp2px(halfHeight), vp2px(20 * radiusScale)); + context.canvas.drawCircle(this.uiContext.vp2px(halfWidth), this.uiContext.vp2px(halfHeight), this.uiContext.vp2px(20 * radiusScale)); } } class MyFrontDrawModifier extends DrawModifier { public scaleX: number = 1; public scaleY: number = 1; + uiContext: UIContext; + + constructor(uiContext: UIContext) { + super(); + this.uiContext = uiContext; + } drawFront(context: DrawContext): void { const brush = new drawing.Brush(); @@ -176,17 +194,17 @@ class MyFrontDrawModifier extends DrawModifier { const halfWidth = context.size.width / 2; const halfHeight = context.size.width / 2; const radiusScale = (this.scaleX + this.scaleY) / 2; - context.canvas.drawCircle(vp2px(halfWidth), vp2px(halfHeight), vp2px(20 * radiusScale)); + context.canvas.drawCircle(this.uiContext.vp2px(halfWidth), this.uiContext.vp2px(halfHeight), this.uiContext.vp2px(20 * radiusScale)); } } @Entry @Component struct DrawModifierExample { - private fullModifier: MyFullDrawModifier = new MyFullDrawModifier(); - private frontModifier: MyFrontDrawModifier = new MyFrontDrawModifier(); + private fullModifier: MyFullDrawModifier = new MyFullDrawModifier(this.getUIContext()); + private frontModifier: MyFrontDrawModifier = new MyFrontDrawModifier(this.getUIContext()); private drawAnimator: AnimatorResult | undefined = undefined; - @State modifier: DrawModifier = new MyFrontDrawModifier(); + @State modifier: DrawModifier = new MyFrontDrawModifier(this.getUIContext()); private count = 0; create() { diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-enable.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-enable.md index 0420f03943e..73a43e6fad4 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-enable.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-enable.md @@ -23,7 +23,7 @@ You can enable or disable a component to control whether it responds to user int ## enabled -enabled(value: boolean) +enabled(value: boolean): T Sets whether the component responds to user interactions. diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-filter-effect.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-filter-effect.md index 7aad1873121..0238981db94 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-filter-effect.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-filter-effect.md @@ -22,6 +22,12 @@ Sets a visual effect that is not a filter effect. | ------ | ------------------------------------------------------------ | ---- | ---------------------------------------------------- | | effect | [VisualEffect](../../apis-arkgraphics2d/js-apis-uiEffect.md#visualeffect) | Yes | Visual effect.| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| + ## backgroundFilter backgroundFilter(filter: Filter): T @@ -38,6 +44,12 @@ Sets the visual effect of the background filter. | ------ | ------------------------------------------------------------ | ---- | ---------------------------------------------------- | | filter | [Filter](../../apis-arkgraphics2d/js-apis-uiEffect.md#filter) | Yes | Visual effect of the background filter.| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| + ## foregroundFilter foregroundFilter(filter: Filter): T @@ -54,6 +66,12 @@ Sets the visual effect of the foreground (content) filter. | ------ | ------------------------------------------------------------ | ---- | ---------------------------------------------------- | | filter | [Filter](../../apis-arkgraphics2d/js-apis-uiEffect.md#filter) | Yes | Visual effect of the foreground (content) filter.| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| + ## compositingFilter compositingFilter(filter: Filter): T @@ -70,6 +88,11 @@ Sets the visual effect of the compositing filter. | ------ | ------------------------------------------------------------ | ---- | ---------------------------------------------------- | | filter | [Filter](../../apis-arkgraphics2d/js-apis-uiEffect.md#filter) | Yes | Visual effect of the compositing filter.| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| ## Example @@ -82,9 +105,9 @@ import { uiEffect } from '@kit.ArkGraphics2D'; @Entry @Component struct FilterEffectExample { - @State filterTest1: uiEffect.Filter = uiEffect.createFilter().blur(10) - @State filterTest2: uiEffect.Filter = uiEffect.createFilter().blur(10) - @State filterTest3: uiEffect.Filter = uiEffect.createFilter().blur(10) + @State filterTest1: uiEffect.Filter = uiEffect.createFilter().blur(10); + @State filterTest2: uiEffect.Filter = uiEffect.createFilter().blur(10); + @State filterTest3: uiEffect.Filter = uiEffect.createFilter().blur(10); build() { Column({ space: 15 }) { diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-foreground-effect.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-foreground-effect.md index 9556d2f6549..43568b9ad65 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-foreground-effect.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-foreground-effect.md @@ -4,11 +4,11 @@ You can apply different visual effects to foreground subjects. > **NOTE** > -> This feature is supported since API version 12. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 12. Updates will be marked with a superscript to indicate their earliest API version. ## foregroundEffect -foregroundEffect(options: ForegroundEffectOptions) +foregroundEffect(options: ForegroundEffectOptions): T Sets the foreground effect of the component. @@ -22,6 +22,12 @@ Sets the foreground effect of the component. | ------ | ------------------------------------------------------------ | ---- | ---------------------------------------------------- | | options | [ForegroundEffectOptions](#foregroundeffectoptions12) | Yes | Foreground effect settings, including the blur radius.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## ForegroundEffectOptions12+ Describes the foreground effect. @@ -57,6 +63,6 @@ struct Index { ``` Below is how the component looks with the foreground effect applied. -A larger radius results in a more pronounced blur. +**radius** indicates the blur radius. A larger value creates a more blurred effect. ![foregroundColor_circle](figures/foregroundEffect.jpg) diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-gesture-modifier.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-gesture-modifier.md index b21df2e1f2f..7922883c8c4 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-gesture-modifier.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-gesture-modifier.md @@ -8,10 +8,14 @@ With the gesture modifier, you can dynamically set gestures bound to components, ## gestureModifier -gestureModifier(modifier: GestureModifier) +gestureModifier(modifier: GestureModifier): T Creates a gesture modifier. +> **NOTE** +> +> **gestureModifier** does not support custom components. + **Atomic service API**: This API can be used in atomic services since API version 12. **System capability**: SystemCapability.ArkUI.ArkUI.Full @@ -22,6 +26,12 @@ Creates a gesture modifier. | -------- | --------------------- | ---- | ------------------------------------------------------------ | | modifier | [GestureModifier](#gesturemodifier-1) | Yes | Modifier for dynamically setting gestures bound to the current component. The **if/else** syntax is supported.
**modifier**: gesture modifier. You need a custom class to implement the **GestureModifier** API.| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| + ## GestureModifier You need a custom class to implement the **GestureModifier** API. @@ -31,7 +41,7 @@ applyGesture(event: UIGestureEvent): void Binds a gesture to this component. -You can customize this API as required. The **if/else** syntax is supported. +You can customize this API as required. Dynamic configuration using the **if/else** syntax is supported. If gesture switching is triggered during an active gesture operation, the new configuration will take effect in the subsequent gesture interaction after all fingers are lifted from the current gesture. **Atomic service API**: This API can be used in atomic services since API version 12. @@ -48,7 +58,7 @@ This example demonstrates how to dynamically set the gestures bound to a compone ```ts // xxx.ets class MyButtonModifier implements GestureModifier { - supportDoubleTap: boolean = true + supportDoubleTap: boolean = true; applyGesture(event: UIGestureEvent): void { if (this.supportDoubleTap) { @@ -83,6 +93,11 @@ struct Index { .width(500) .height(500) .backgroundColor(Color.Blue) + Button('changeGesture') + .onClick(() => { + this.modifier.supportDoubleTap = !this.modifier.supportDoubleTap; + }) + .margin({top: 10}) } .width('100%') } diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-monopolize-events.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-monopolize-events.md index 02719fb3077..544419b6a41 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-monopolize-events.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-monopolize-events.md @@ -5,11 +5,11 @@ When a component with event monopolization is the first to respond to an interac > **NOTE** > -> This feature is supported since API version 11. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 11. Updates will be marked with a superscript to indicate their earliest API version. ## monopolizeEvents -monopolizeEvents(monopolize: boolean) +monopolizeEvents(monopolize: boolean): T Sets whether the component exclusively handles events. @@ -19,11 +19,16 @@ Sets whether the component exclusively handles events. **Parameters** - | Name | Type| Mandatory| Description | | ----------- | -------- | ------------------------ | ------------------------ | | monopolize | boolean | Yes| Whether the component exclusively handles events.
**true**: The component exclusively handles events.
**false**: The component does not exclusively handle events.
Default value: **false**.
**NOTE**
1. If a component is exclusively handling events after a finger is pressed on it, and another finger is pressed before the first finger is lifted, the component continues to exclusively handle events while interacting with the second finger. The same case applies to a third and more fingers.
2. If a component is bound through [parallelGesture](ts-gesture-settings.md) to a gesture, for example, [pan gesture](ts-basic-gestures-pangesture.md), that can also be triggered by its child component, and the child component has event monopolization and is the first to respond, then the parent will not respond to the gesture.| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| + ## Example This example demonstrates how to set **monopolizeEvents** to determine whether a component exclusively handles events. @@ -33,10 +38,10 @@ This example demonstrates how to set **monopolizeEvents** to determine whether a @Entry @Component struct Index { - @State message: string = 'set monopolizeEvents false' - @State messageOut: string = ' ' - @State messageInner: string = ' ' - @State monopolize: boolean = false + @State message: string = 'set monopolizeEvents false'; + @State messageOut: string = ' '; + @State messageInner: string = ' '; + @State monopolize: boolean = false; build() { Column() { diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-on-child-touch-test.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-on-child-touch-test.md index 2a5649781da..95343545a5c 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-on-child-touch-test.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-on-child-touch-test.md @@ -1,10 +1,10 @@ # Custom Event Dispatch -When handling a touch event, ArkUI performs a touch test on the touch point and the component area before the event is triggered – to determine the components targeted by the event – and dispatches the event based on the test result. You can use **onChildTouchTest** on a parent node to specify how to perform the touch test on child nodes and thereby exert an impact on touch event dispatch. For details about the impact, see [TouchTestStrategy](#touchteststrategy). +When handling a touch event, ArkUI performs a hit test on the touch point and the component area before the event is triggered – to determine the components targeted by the event – and dispatches the event based on the test result. You can use **onChildTouchTest** on a parent node to specify how to perform the hit test on child nodes and thereby exert an impact on touch event dispatch. For details about the impact, see [TouchTestStrategy](#touchteststrategy). > **NOTE** > -> - This feature is supported since API version 11. Updates will be marked with a superscript to indicate their earliest API version. +> - The initial APIs of this module are supported since API version 11. Updates will be marked with a superscript to indicate their earliest API version. > > - With use of **onChildTouchTest**, the **onClick**, rotation, and pinch gesture events may receive no response due to the touch target not being hit. @@ -12,7 +12,7 @@ When handling a touch event, ArkUI performs a touch test on the touch point and onChildTouchTest(event: (value: Array<TouchTestInfo>) => TouchResult): T -Called to specify how to perform the touch test on the children of this component. +Allows the current component to customize the hit test and control child component behavior during the test by setting a callback. **Atomic service API**: This API can be used in atomic services since API version 12. @@ -22,7 +22,7 @@ Called to specify how to perform the touch test on the children of this componen | Name| Type | Mandatory| Description | | ------ | ------------------------------------------ | ---- | ---------------------- | -| value | Array<[TouchTestInfo>](#touchtestinfo) | Yes | Array of child components.| +| value | Array<[TouchTestInfo>](#touchtestinfo) | Yes | Array of child node information.| **Return value** @@ -32,7 +32,7 @@ Called to specify how to perform the touch test on the children of this componen >**NOTE** > ->The array of child components contains only components for which **id** is set. +>The array of child node information only includes information about named nodes, that is, nodes for which the **id** attribute is explicitly set. ## TouchTestInfo @@ -76,24 +76,25 @@ Enumerates the event dispatch strategies. | Name | Description | | ------------| ----------------------------------------- | -| DEFAULT | Custom dispatch has no effect; the system distributes events based on the hit status of the current node.| -| FORWARD_COMPETITION | The specified event is forwarded to a particular child node, and the system determines whether to distribute the event to other sibling nodes.| -| FORWARD | The specified event is forwarded to a particular child node, and the system no longer distributes the event to other sibling nodes.| +| DEFAULT | Custom dispatch has no effect; the system dispatches events based on the hit status of the current node.| +| FORWARD_COMPETITION | The event is dispatched to a specified child node, and the system determines whether to dispatch events to other sibling nodes.| +| FORWARD | The event is dispatched to a specified child node, and the system will not dispatch events to other sibling nodes.| ## Example ### Example 1: Setting the Event Dispatch Strategy to FORWARD_COMPETITION -In this example, dragging the blank area below the list allows the list to scroll, and clicking the button will trigger its **onClick** event. +In this example, clicking and dragging in the blank area below the **List** component causes the **List** component to scroll. The **Button** component still responds to clicks. ```ts // xxx.ets -import { promptAction } from '@kit.ArkUI'; +import { PromptAction } from '@kit.ArkUI'; @Entry @Component struct ListExample { private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + promptAction: PromptAction = this.getUIContext().getPromptAction(); @State text: string = 'Button' build() { @@ -134,7 +135,7 @@ struct ListExample { .margin({ top: 80 }) .onClick(() => { this.text = 'click the button' - promptAction.showToast({ message: 'you click the button.', duration: 3000 }) + this.promptAction.showToast({ message: 'you click the button.', duration: 3000 }) }) } .width('100%') @@ -158,16 +159,17 @@ struct ListExample { ### Example 2: Setting the Event Dispatch Strategy to FORWARD -In this example, dragging the blank area below the list allows the list to scroll, but clicking the button will not trigger its **onClick** event. +In this example, clicking and dragging in the blank area below the **List** component causes the **List** component to scroll. The **Button** component does not respond to clicks. ```ts // xxx.ets -import { promptAction } from '@kit.ArkUI'; +import { PromptAction } from '@kit.ArkUI'; @Entry @Component struct ListExample { private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + promptAction: PromptAction = this.getUIContext().getPromptAction(); @State text: string = 'Button' build() { @@ -208,7 +210,7 @@ struct ListExample { .margin({ top: 80 }) .onClick(() => { this.text = 'click the button' - promptAction.showToast({ message: 'you click the button.', duration: 3000 }) + this.promptAction.showToast({ message: 'you click the button.', duration: 3000 }) }) } .width('100%') @@ -232,16 +234,17 @@ struct ListExample { ### Example 3: Setting the Event Dispatch Strategy to DEFAULT -In this example, dragging the blank area below the list will not scroll the list, and clicking the button will trigger its **onClick** event. +In this example, clicking and dragging in the blank area below the **List** component does not cause the **List** component to scroll. The **Button** component responds to clicks. ```ts // xxx.ets -import { promptAction } from '@kit.ArkUI'; +import { PromptAction } from '@kit.ArkUI'; @Entry @Component struct ListExample { private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + promptAction: PromptAction = this.getUIContext().getPromptAction(); @State text: string = 'Button' build() { @@ -282,7 +285,7 @@ struct ListExample { .margin({ top: 80 }) .onClick(() => { this.text = 'click the button' - promptAction.showToast({ message: 'you click the button.', duration: 3000 }) + this.promptAction.showToast({ message: 'you click the button.', duration: 3000 }) }) } .width('100%') diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-outline.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-outline.md index 5eb0fa489a3..df9e23f8695 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-outline.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-outline.md @@ -6,11 +6,11 @@ You can set outline attributes for components. Drawn outside the component, the > **NOTE** > -> This feature is supported since API version 11. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 11. Updates will be marked with a superscript to indicate their earliest API version. ## outline -outline(value: OutlineOptions) +outline(value: OutlineOptions): T Sets the outline attributes in one declaration. @@ -26,9 +26,15 @@ Sets the outline attributes in one declaration. | ------ | ----------------------------------------- | ---- | ------------ | | value | [OutlineOptions](#outlineoptions) | Yes | Outline attributes.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## outline18+ -outline(options: Optional\) +outline(options: Optional\): T Sets the outline attributes in one declaration. Compared to [outline](#outline), this API supports the **undefined** type for the **options** parameter. @@ -44,6 +50,12 @@ Sets the outline attributes in one declaration. Compared to [outline](#outline), | ------ | ----------------------------------------- | ---- | ---- | | options | Optional\<[OutlineOptions](#outlineoptions)> | Yes | Outline attributes.
If **options** is **undefined**, the component reverts to its original style with no outline. | +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## OutlineStyle11+ Outline attributes. @@ -62,7 +74,7 @@ Outline attributes. ## outlineStyle -outlineStyle(value: OutlineStyle | EdgeOutlineStyles) +outlineStyle(value: OutlineStyle | EdgeOutlineStyles): T Sets the style of the outline. @@ -78,9 +90,15 @@ Sets the style of the outline. | ------ | ------------------------------------------------------------ | ---- | ----------------------------------------------------- | | value | [OutlineStyle](#outlinestyle11) \| [EdgeOutlineStyles](#edgeoutlinestyles) | Yes | Outline style.
Default value: **OutlineStyle.SOLID**| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## outlineStyle18+ -outlineStyle(style: Optional\) +outlineStyle(style: Optional\): T Sets the style of the outline. Compared to [outlineStyle](#outlinestyle), this API supports the **undefined** type for the **style** parameter. @@ -96,9 +114,15 @@ Sets the style of the outline. Compared to [outlineStyle](#outlinestyle), this A | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | style | Optional\<[OutlineStyle](#outlinestyle11) \| [EdgeOutlineStyles](#edgeoutlinestyles)> | Yes | Outline style.
Default value: **OutlineStyle.SOLID**
If **style** is **undefined**, the component reverts to its original style with no outline.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## outlineWidth -outlineWidth(value: Dimension | EdgeOutlineWidths) +outlineWidth(value: Dimension | EdgeOutlineWidths): T Sets the thickness of the outline. @@ -114,9 +138,15 @@ Sets the thickness of the outline. | ------ | ------------------------------------------------------------ | ---- | ----------------------------------------------------- | | value | [Dimension](ts-types.md#dimension10) \| [EdgeOutlineWidths](#edgeoutlinewidths) | Yes | Outline thickness. Percentage values are not supported.
Default value: **0**| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## outlineWidth18+ -outlineWidth(width: Optional\) +outlineWidth(width: Optional\): T Sets the thickness of the outline. Compared to [[outlineWidth](#outlinewidth), this API supports the **undefined** type for the **width** parameter. @@ -132,9 +162,15 @@ Sets the thickness of the outline. Compared to [[outlineWidth](#outlinewidth), t | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | width | Optional\<[Dimension](ts-types.md#dimension10) \| [EdgeOutlineWidths](#edgeoutlinewidths)> | Yes | Outline thickness. Percentage values are not supported.
Default value: **0**
If **width** is **undefined**, the component reverts to its original style with no outline width.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## outlineColor -outlineColor(value: ResourceColor | EdgeColors) +outlineColor(value: ResourceColor | EdgeColors): T Sets the color of the outline. @@ -148,11 +184,17 @@ Sets the color of the outline. | Name| Type | Mandatory| Description | | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------ | -| value | [ResourceColor](ts-types.md#resourcecolor) \| [EdgeColors](#edgecolors) | Yes | Outline color.
Default value: **Color.Black**| +| value | [ResourceColor](ts-types.md#resourcecolor) \| [EdgeColors](#edgecolors) | Yes | Outline color.
Default value: **Color.Black**.| + +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| ## outlineColor18+ -outlineColor(color: Optional\) +outlineColor(color: Optional\): T Sets the color of the outline. Compared to [outlineColor](#outlinecolor), this API supports the **undefined** type for the **color** parameter. @@ -166,11 +208,17 @@ Sets the color of the outline. Compared to [outlineColor](#outlinecolor), this A | Name| Type | Mandatory| Description | | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | -| color | Optional\<[ResourceColor](ts-types.md#resourcecolor) \| [EdgeColors](#edgecolors)> | Yes | Outline color.
Default value: **Color.Black**
If **color** is **undefined**, the component reverts to its original style with the outline color of **Color.Black**.| +| color | Optional\<[ResourceColor](ts-types.md#resourcecolor) \| [EdgeColors](#edgecolors)> | Yes | Outline color.
Default value: **Color.Black**.
If **color** is **undefined**, the component reverts to its original style with the outline color of **Color.Black**.| + +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| ## outlineRadius -outlineRadius(value: Dimension | OutlineRadiuses) +outlineRadius(value: Dimension | OutlineRadiuses): T Sets the radius of the outline corners. @@ -186,9 +234,15 @@ Sets the radius of the outline corners. | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | value | [Dimension](ts-types.md#dimension10) \| [OutlineRadiuses](#outlineradiuses) | Yes | Radius of the outline corners. Percentage values are not supported.
Default value: **0**
Maximum effective value: Component width/2 + outlineWidth or component height/2 + outlineWidth| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## outlineRadius18+ -outlineRadius(radius: Optional\) +outlineRadius(radius: Optional\): T Sets the radius of the outline corners. Compared to [outlineRadius](#outlineradius), this API supports the **undefined** type for the **radius** parameter. @@ -204,6 +258,12 @@ Sets the radius of the outline corners. Compared to [outlineRadius](#outlineradi | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | radius | Optional\<[Dimension](ts-types.md#dimension10) \| [OutlineRadiuses](#outlineradiuses)> | Yes | Radius of the outline corners. Percentage values are not supported.
Default value: **0**
Maximum effective value: Component width/2 + outlineWidth or component height/2 + outlineWidth
If **radius** is **undefined**, the component reverts to its original style with the outline corner radius of 0.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## OutlineOptions **Atomic service API**: This API can be used in atomic services since API version 12. @@ -212,8 +272,8 @@ Sets the radius of the outline corners. Compared to [outlineRadius](#outlineradi | Name | Type |Mandatory | Description | | ------ | ----------------------|-------------------------------------- | ------------------------------------------------------------ | -| width | [Dimension](ts-types.md#dimension10) \| [EdgeOutlineWidths](#edgeoutlinewidths) | No| Outline thickness. Percentage values are not supported.
Default value: **0**| -| color | [ResourceColor](ts-types.md#resourcecolor) \| [EdgeColors](#edgecolors) \| [LocalizedEdgeColors](#localizededgecolors12)12+ |No| Outline color.
Default value: **Color.Black** | +| width | [Dimension](ts-types.md#dimension10) \| [EdgeOutlineWidths](#edgeoutlinewidths) | No| Outline thickness. Percentage values are not supported.
Default value: **0**.
**width** must be set to display the outline effect.| +| color | [ResourceColor](ts-types.md#resourcecolor) \| [EdgeColors](#edgecolors) \| [LocalizedEdgeColors](#localizededgecolors12)12+ |No| Outline color.
Default value: **Color.Black**. | | radius | [Dimension](ts-types.md#dimension10) \| [OutlineRadiuses](#outlineradiuses) | No| Radius of the outline corners. Percentage values are not supported.
Default value: **0**
Maximum effective value: Component width/2 + outlineWidth or component height/2 + outlineWidth| | style | [OutlineStyle](#outlinestyle11) \| [EdgeOutlineStyles](#edgeoutlinestyles) |No| Outline style.
Default value: **OutlineStyle.SOLID** | @@ -259,8 +319,8 @@ To reference this object, at least one parameter must be passed. | Name | Type | Mandatory | Description | | ------ | ---------------------------------------- | ---- | ------- | -| start | [ResourceColor](ts-types.md#resourcecolor) | No | Color of the left outline.
For right-to-left scripts, this indicates the color of the right outline.| -| end | [ResourceColor](ts-types.md#resourcecolor) | No | Color of the right outline.
For right-to-left scripts, this indicates the color of the left outline.| +| start | [ResourceColor](ts-types.md#resourcecolor) | No | Color of the left outline.
For left-to-right scripts, this indicates the color of the right outline.| +| end | [ResourceColor](ts-types.md#resourcecolor) | No | Color of the right outline.
For left-to-right scripts, this indicates the color of the left outline.| | top | [ResourceColor](ts-types.md#resourcecolor) | No | Color of the top outline.| | bottom | [ResourceColor](ts-types.md#resourcecolor) | No | Color of the bottom outline.| diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-pixelRound.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-pixelRound.md index fdb6c08153c..d0d9e169e99 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-pixelRound.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-pixelRound.md @@ -8,7 +8,7 @@ Component-level pixel rounding allows you to enable or disable system pixel roun ## pixelRound -pixelRound(value: PixelRoundPolicy) +pixelRound(value: PixelRoundPolicy): T Sets the pixel rounding policy for the current component in the specified direction. If a direction is not set, the pixels are rounded to the nearest whole number in that direction. @@ -16,11 +16,11 @@ Sets the pixel rounding policy for the current component in the specified direct > > In API version 11, this API uses half-pixel alignment (that is, 0\-0.25 rounds to 0, 0.25\-0.75 rounds to 0.5, 0.75\-1.0 rounds to 1). Since API version 12, this API rounds pixels to the nearest integers and allows you to disable pixel rounding for individual components. -In normal calculations, the top and bottom directions correspond to the component height, and the left and right directions (the starting direction of mirroring is called left) and width correspond to each other. For ease of description, these two sets of directions are referred to as upper left and lower right. +In normal calculations, the vertical direction (top and bottom) correspond to the component height, and the horizontal direction (the starting direction of mirroring is considered "left") correspond to the component width. For ease of description, these two sets of directions are referred to as top-left and bottom-right. -- Calculate the upper left corner coordinates of the current component: offset of the upper left corner relative to the parent container. -- Calculate the lower right corner coordinates of the current component: offset of the upper left corner relative to the parent container plus the size of the component itself. -- Recalculate the size of the current component: lower right corner rounded value minus the upper left corner rounded value. +- Calculate the top-left coordinates of the current component: offset of the top-left corner relative to the parent container. +- Calculate the bottom-right coordinates of the current component: offset of the top-left corner relative to the parent container plus the size of the component itself. +- Recalculate the size of the current component: bottom-right corner rounded value minus the top-left corner rounded value. **Widget capability**: This API can be used in ArkTS widgets since API version 11. @@ -34,6 +34,12 @@ In normal calculations, the top and bottom directions correspond to the componen | ------ | ------ | ---- | ------------------------------------------------------------ | | value | [PixelRoundPolicy](ts-types.md#pixelroundpolicy11) | Yes| Rounding policy for the bounds of the component.
**NOTE**
This attribute is applicable in scenarios where artifacts occur due to floating-point drawing. The rounding result is related not only to the component's width and height but also to its position. Even if the component's width and height are set to be the same, due to different floating-point positions described, the final width and height of the component may also be different after rounding.| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + ## FAQs | Issue | Solution | diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-popup.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-popup.md index 0fc995b7c7c..6f44205846c 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-popup.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-popup.md @@ -10,7 +10,7 @@ You can bind a popup to a component, specifying its content, interaction logic, ## bindPopup -bindPopup(show: boolean, popup: PopupOptions | CustomPopupOptions) +bindPopup(show: boolean, popup: PopupOptions | CustomPopupOptions): T Binds a popup to the component. @@ -22,11 +22,13 @@ Binds a popup to the component. | Name| Type | Mandatory| Description | | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | -| show | boolean | Yes | Whether to show the popup. The default value is **false**, indicating that the popup is hidden. The popup can be displayed only after the entire page is fully constructed. Therefore, to avoid incorrect display positions and shapes, do not set this parameter to **true** while the page is still being constructed. Since API version 13, this parameter supports two-way binding through [!!](../../../ui/state-management/arkts-new-binding.md#two-way-binding-between-built-in-component-parameters).| +| show | boolean | Yes | Whether to show the popup. The default value is **false**, indicating that the popup is hidden. The popup can be displayed only after the entire page is fully constructed. Therefore, to avoid incorrect display positions and shapes, do not set this parameter to **true** while the page is still being constructed. Since API version 13, this parameter supports two-way binding through the [!! syntax](../../../ui/state-management/arkts-new-binding.md#two-way-binding-between-built-in-component-parameters).| | popup | [PopupOptions](#popupoptions) \| [CustomPopupOptions](#custompopupoptions8)8+ | Yes | Parameters of the popup. | ## PopupOptions +**System capability**: SystemCapability.ArkUI.ArkUI.Full + | Name | Type | Mandatory| Description | | ------------------------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | message | string | Yes | Content of the popup message.
**Atomic service API**: This API can be used in atomic services since API version 11. | @@ -151,6 +153,7 @@ Parameters of the popup. Use the [getPromptAction()](../js-apis-arkui-UIContext. | transition | [TransitionEffect](ts-transition-animation-component.md#transitioneffect10) | No| Transition effect for the entrance and exit of the popup.
**NOTE**
1. If this parameter is not set, the default effect is used.
2. Touching the Back button during the entrance animation pauses the entrance animation and starts the exit animation. The final effect is one obtained after the curves of the entrance and exit animations are combined.
3. Touching the Back button during the exit animation does not affect the animation playback. The Back button does not respond.
4. The settings cannot be updated through [updatePopup](../js-apis-arkui-UIContext.md#updatepopup18).| | onWillDismiss | boolean\|Callback<[DismissPopupAction](#dismisspopupaction12)> | No | Whether to perform dismissal event interception and interception callback. The default value is **true**.
1. If this parameter is set to **false**, the system does not respond to the dismissal event initiated by touching the Back button, swiping left or right on the screen, or pressing the Esc key; and the system dismisses the popup only when **show** is set to **false**. If this parameter is set to **true**, the system responds to the dismissal event as expected.
2. If this parameter is set to a function, the dismissal event is intercepted and the callback function is executed.
**NOTE**
1. Nesting **onWillDismiss** callbacks is not allowed.
2. The settings cannot be updated through [updatePopup](../js-apis-arkui-UIContext.md#updatepopup18).| | followTransformOfTarget | boolean | No | Whether the popup adjusts its position to follow transformations (like rotation or scaling) applied to its host component or the host component's parent container.
Default value: **false**| +|enableHoverMode | boolean | No | Whether to enable the hover mode. If the click position of the popup component is in the crease area in the hover state, the popup component does not respond to the hover state. Default value: **false**, indicating that the popup does not respond in hover mode
**NOTE**
The popup responds in hover mode when **enableHoverMode** is set to **true** and does not when **enableHoverMode** is set to **false** or an invalid value or is not set at all.| ## PopupStateChangeParam18+ @@ -180,12 +183,6 @@ type PopupStateChangeCallback = (event: PopupStateChangeParam) => void; | --------- | ------------------------------------------ | ---- | ------------------------------------------------------------ | | event | [PopupStateChangeParam](#popupstatechangeparam18) | Yes | Display state of the popup. | -**Return value** - -| Type | Description | -| ---------------------------------------- | ------- | -| void | Callback invoked when the popup state changes.| - ## PopupMaskType18+ Describes the color of the mask. @@ -236,22 +233,22 @@ struct PopupExample { primaryButton: { value: 'confirm', action: () => { - this.handlePopup = !this.handlePopup - console.info('confirm Button click') + this.handlePopup = !this.handlePopup; + console.info('confirm Button click'); } }, // Secondary button secondaryButton: { value: 'cancel', action: () => { - this.handlePopup = !this.handlePopup - console.info('cancel Button click') + this.handlePopup = !this.handlePopup; + console.info('cancel Button click'); } }, onStateChange: (e) => { console.info(JSON.stringify(e.isVisible)) if (!e.isVisible) { - this.handlePopup = false + this.handlePopup = false; } } }) @@ -261,7 +258,7 @@ struct PopupExample { // CustomPopupOptions for setting the popup Button('CustomPopupOptions') .onClick(() => { - this.customPopup = !this.customPopup + this.customPopup = !this.customPopup; }) .bindPopup(this.customPopup, { builder: this.popupBuilder, @@ -274,7 +271,7 @@ struct PopupExample { showInSubWindow: false, onStateChange: (e) => { if (!e.isVisible) { - this.customPopup = false + this.customPopup = false; } } }) @@ -320,9 +317,9 @@ struct PopupExample { enableArrow: false, // Set the arrow not to display. targetSpace: '15vp', onStateChange: (e) => { - console.info(JSON.stringify(e.isVisible)) + console.info(JSON.stringify(e.isVisible)); if (!e.isVisible) { - this.handlePopup = false + this.handlePopup = false; } } }) @@ -343,8 +340,8 @@ This example demonstrates how to use the **bindPopup** API with properties like @Entry @Component struct PopupExample { - @State customPopup: boolean = false - @State handlePopup: boolean = false + @State customPopup: boolean = false; + @State handlePopup: boolean = false; build() { Column({ space: 100 }) { @@ -363,7 +360,7 @@ struct PopupExample { Button('PopupOptions') .onClick(() => { - this.handlePopup = !this.handlePopup + this.handlePopup = !this.handlePopup; }) .bindPopup(this.handlePopup, { width: 300, @@ -390,8 +387,8 @@ In this example, the **bindPopup** API is used with the **transition** property @Entry @Component struct PopupExample { - @State handlePopup: boolean = false - @State customPopup: boolean = false + @State handlePopup: boolean = false; + @State customPopup: boolean = false; // Popup builder @Builder popupBuilder() { @@ -405,7 +402,7 @@ struct PopupExample { // PopupOptions for setting the popup Button('PopupOptions') .onClick(() => { - this.handlePopup = !this.handlePopup + this.handlePopup = !this.handlePopup; }) .bindPopup(this.handlePopup, { message: 'This is a popup with transitionEffect', @@ -414,7 +411,7 @@ struct PopupExample { onStateChange: (e) => { console.info(JSON.stringify(e.isVisible)) if (!e.isVisible) { - this.handlePopup = false + this.handlePopup = false; } }, // Set the popup animation to a combination of opacity and translation effects, with no exit animation. @@ -428,7 +425,7 @@ struct PopupExample { // CustomPopupOptions for setting the popup Button('CustomPopupOptions') .onClick(() => { - this.customPopup = !this.customPopup + this.customPopup = !this.customPopup; }) .bindPopup(this.customPopup, { builder: this.popupBuilder, @@ -436,7 +433,7 @@ struct PopupExample { showInSubWindow: false, onStateChange: (e) => { if (!e.isVisible) { - this.customPopup = false + this.customPopup = false; } }, // Set the popup entrance and exit animations to be a scaling effect. @@ -460,12 +457,12 @@ This example uses the **bindPopup** API with the **onWillDismiss** property to i @Entry @Component struct PopupExample { - @State handlePopup: boolean = false + @State handlePopup: boolean = false; build() { Column() { Button('PopupOptions') .onClick(() => { - this.handlePopup = true + this.handlePopup = true; }) .bindPopup(this.handlePopup, { message: 'This is a popup with PopupOptions', @@ -482,14 +479,14 @@ struct PopupExample { targetSpace: '15vp', onStateChange: (e) => { if (!e.isVisible) { - this.handlePopup = false + this.handlePopup = false; } }, onWillDismiss: ( (dismissPopupAction: DismissPopupAction) => { - console.info("dismissReason:" + JSON.stringify(dismissPopupAction.reason)) - if (dismissPopupAction.reason == DismissReason.PRESS_BACK) { - dismissPopupAction.dismiss() + console.info("dismissReason:" + JSON.stringify(dismissPopupAction.reason)); + if (dismissPopupAction.reason === DismissReason.PRESS_BACK) { + dismissPopupAction.dismiss(); } } ) @@ -511,12 +508,13 @@ In this example, the **onWillDismiss** property is set to **false** to intercept @Entry @Component struct PopupExample { - @State handlePopup: boolean = false + @State handlePopup: boolean = false; + build() { Column() { Button('PopupOptions') .onClick(() => { - this.handlePopup = true + this.handlePopup = true; }) .bindPopup(this.handlePopup, { message: 'This is a popup with PopupOptions', @@ -533,10 +531,12 @@ struct PopupExample { targetSpace: '15vp', followTransformOfTarget: true, onStateChange: (e) => { - let timer = setTimeout(()=>{this.handlePopup = false},6000) + let timer = setTimeout(() => { + this.handlePopup = false; + }, 6000); if (!e.isVisible) { - this.handlePopup = false - clearTimeout(timer) + this.handlePopup = false; + clearTimeout(timer); } }, onWillDismiss: false diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-reuse-id.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-reuse-id.md index 56c16237a3b..e3f088e9a9b 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-reuse-id.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-reuse-id.md @@ -13,6 +13,10 @@ reuseId(id: string) Sets the ID that identifies the reuse group of the component. +> **NOTE** +> +> Set **reuseId** flexibly based on different scenarios to achieve optimal reuse effects. For best practices, see [Using reuseId to Mark Components with Layout Changes](https://developer.huawei.com/consumer/en/doc/best-practices/bpta-component-reuse#section1239555818211). + **Atomic service API**: This API can be used in atomic services since API version 11. **System capability**: SystemCapability.ArkUI.ArkUI.Full diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-sharp-clipping.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-sharp-clipping.md index 175ae6991dd..572b0ebcaac 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-sharp-clipping.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-sharp-clipping.md @@ -4,11 +4,11 @@ Shape clipping changes the visible portion of a component through clipping or ma > **NOTE** > -> The APIs of this module are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. ## clip12+ -clip(value: boolean) +clip(value: boolean): T Sets whether to clip the areas of child components that extend beyond this component's boundaries, that is, whether to perform clipping based on the edge contour of the parent container @@ -24,9 +24,15 @@ Sets whether to clip the areas of child components that extend beyond this compo | ------ | ------- | ---- | ------------------------------------------------------------ | | value | boolean | Yes | Whether to perform clipping based on the edge contour of the parent container.
Default value: **false**
**true**: Perform clipping.
**false**: Do not perform clipping.
**NOTE**
If this parameter is set to **true**, child components exceeding the current component's bounds will not respond to bound gesture events.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## clip18+ -clip(clip: Optional\) +clip(clip: Optional\): T Sets whether to clip the areas of child components that extend beyond this component's boundaries, that is, whether to perform clipping based on the edge contour of the parent container Compared to [clip12+](#clip12), this API supports the **undefined** type for the **clip** parameter. @@ -42,9 +48,15 @@ Sets whether to clip the areas of child components that extend beyond this compo | ------ | ------------------ | ------------------------------------------------------------ | ---- | | clip | Optional\ | Yes| Whether to perform clipping based on the edge contour of the parent container.
Default value: **false**
**NOTE**
If this parameter is set to **true**, child components exceeding the current component's bounds will not respond to bound gesture events.
If **clip** is set to **undefined**, clipping is disabled, and child components are not clipped. | +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## clip(deprecated) -clip(value: boolean | CircleAttribute | EllipseAttribute | PathAttribute | RectAttribute) +clip(value: boolean | CircleAttribute | EllipseAttribute | PathAttribute | RectAttribute): T Sets whether to clip this component based on the given shape. @@ -62,11 +74,25 @@ Sets whether to clip this component based on the given shape. | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | value | boolean \| [CircleAttribute](ts-drawing-components-circle.md) \| [EllipseAttribute](ts-drawing-components-ellipse.md) \| [PathAttribute](ts-drawing-components-path.md) \| [RectAttribute](ts-drawing-components-rect.md) | Yes | Clip mode. If the value is a shape attribute, the component is clipped based on the specified shape. If the value is of the Boolean type, it specifies whether to clip the component based on the boundaries of the parent container.
Default value: **false**
**NOTE**
If the value is a shape attribute, the clipped area can still respond to bound gesture events. If the value is of the Boolean type, the clipped area will not respond to bound gesture events.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## clipShape12+ -clipShape(value: CircleShape | EllipseShape | PathShape | RectShape) +clipShape(value: CircleShape | EllipseShape | PathShape | RectShape): T -Clips this component based on the given shape. +Clips this component according to the specified shape (which may include position information). + +> **NOTE** +> +> Different shapes support different ranges of attributes. A path is one type of shape, along with others like ellipses and rectangles. +> +> Path shapes do not support setting width and height attributes. For details about the supported attributes, see the specific shape documentation. +> +> The [fill](../js-apis-arkui-shape.md#fill) attribute of shapes has no effect on the **clipShape** API. **System capability**: SystemCapability.ArkUI.ArkUI.Full @@ -78,13 +104,27 @@ Clips this component based on the given shape. | Name| Type | Mandatory| Description | | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | -| value | [CircleShape](../js-apis-arkui-shape.md#circleshape) \| [EllipseShape](../js-apis-arkui-shape.md#ellipseshape) \| [PathShape](../js-apis-arkui-shape.md#pathshape) \| [RectShape](../js-apis-arkui-shape.md#rectshape) | Yes | Shape that the component to be clipped into.
**NOTE**
The clipped area remains responsive to bound gesture events.| +| value | [CircleShape](../js-apis-arkui-shape.md#circleshape) \| [EllipseShape](../js-apis-arkui-shape.md#ellipseshape) \| [PathShape](../js-apis-arkui-shape.md#pathshape) \| [RectShape](../js-apis-arkui-shape.md#rectshape) | Yes | Shape (which may include position information) to clip the current component.
**NOTE**
The clipped area remains responsive to bound gesture events.| + +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| ## clipShape18+ -clipShape(shape: Optional\) +clipShape(shape: Optional\): T + +Clips this component according to the specified shape (which may include position information). Compared to [clipShape12+](#clipshape12), the **shape** parameter supports the **undefined** type. -Sets whether to clip this component based on the given shape. Compared to [clipShape12+](#clipshape12), this API supports the **undefined** type for the **shape** parameter. +> **NOTE** +> +> Different shapes support different ranges of attributes. A path is one type of shape, along with others like ellipses and rectangles. +> +> Path shapes do not support setting width and height attributes. For details about the supported attributes, see the specific shape documentation. +> +> The [fill](../js-apis-arkui-shape.md#fill) attribute of shapes has no effect on the **clipShape** API. **System capability**: SystemCapability.ArkUI.ArkUI.Full @@ -96,11 +136,17 @@ Sets whether to clip this component based on the given shape. Compared to [clipS | Name| Type | Mandatory| Description | | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | -| shape | Optional\<[CircleShape](../js-apis-arkui-shape.md#circleshape) \| [EllipseShape](../js-apis-arkui-shape.md#ellipseshape) \| [PathShape](../js-apis-arkui-shape.md#pathshape) \| [RectShape](../js-apis-arkui-shape.md#rectshape)> | Yes | Shape that the component to be clipped into.
**NOTE**
The clipped area remains responsive to bound gesture events.
If **shape** is set to **undefined**, the previous value is retained.| +| shape | Optional\<[CircleShape](../js-apis-arkui-shape.md#circleshape) \| [EllipseShape](../js-apis-arkui-shape.md#ellipseshape) \| [PathShape](../js-apis-arkui-shape.md#pathshape) \| [RectShape](../js-apis-arkui-shape.md#rectshape)> | Yes | Shape (which may include position information) to clip the current component.
**NOTE**
The clipped area remains responsive to bound gesture events.
If **shape** is set to **undefined**, the previous value is retained.| + +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| ## mask12+ -mask(value: ProgressMask) +mask(value: ProgressMask): T Adds a mask to the component to indicate the progress. @@ -114,9 +160,15 @@ Adds a mask to the component to indicate the progress. | ------ | ------------------------------- | ---- | ---------------------------------------------------- | | value | [ProgressMask](#progressmask10) | Yes | Mask to add to the component, which allows for dynamic adjustment of progress, maximum value, and color settings.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## mask18+ -mask(mask: Optional\) +mask(mask: Optional\): T Adds a mask to the component to indicate the progress. Compared to [mask12+](#mask12), this API supports the **undefined** type for the **mask** parameter. @@ -130,9 +182,15 @@ Adds a mask to the component to indicate the progress. Compared to [mask12+ | ------ | ------------------------------------------------------------ | ---- | -------------------------------- | | mask | Optional\<[ProgressMask](#progressmask10)> | Yes| Mask to add to the component, which allows for dynamic adjustment of progress, maximum value, and color settings.
If **mask** is set to **undefined**, the component to revert to its original effect without the mask to indicate the progress. | +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## mask(deprecated) -mask(value: CircleAttribute | EllipseAttribute | PathAttribute | RectAttribute | ProgressMask) +mask(value: CircleAttribute | EllipseAttribute | PathAttribute | RectAttribute | ProgressMask): T Adds a mask of the specified shape to the component. @@ -150,9 +208,15 @@ Adds a mask of the specified shape to the component. | ------ | ------------------------------------------------------------ | ---- | -------------------------------- | | value | [CircleAttribute](ts-drawing-components-circle.md) \| [EllipseAttribute](ts-drawing-components-ellipse.md) \| [PathAttribute](ts-drawing-components-path.md) \| [RectAttribute](ts-drawing-components-rect.md) \| [ProgressMask](#progressmask10)10+ | Yes | Mask of the specified shape to add to the component.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## maskShape12+ -maskShape(value: CircleShape | EllipseShape | PathShape | RectShape) +maskShape(value: CircleShape | EllipseShape | PathShape | RectShape): T Adds a mask of the specified shape to the component. @@ -168,9 +232,15 @@ Adds a mask of the specified shape to the component. | ------ | ------------------------------------------------------------ | ---- | -------------------------------- | | value | [CircleShape](../js-apis-arkui-shape.md#circleshape) \| [EllipseShape](../js-apis-arkui-shape.md#ellipseshape) \| [PathShape](../js-apis-arkui-shape.md#pathshape) \| [RectShape](../js-apis-arkui-shape.md#rectshape) | Yes | Mask of the specified shape to add to the component.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## maskShape18+ -maskShape(shape: Optional\) +maskShape(shape: Optional\): T Adds a mask of the specified shape to the component. Compared to [maskShape12+](#maskshape12), this API supports the **undefined** type for the **shape** parameter. @@ -186,6 +256,12 @@ Adds a mask of the specified shape to the component. Compared to [maskShape | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | shape | Optional\<[CircleShape](../js-apis-arkui-shape.md#circleshape) \| [EllipseShape](../js-apis-arkui-shape.md#ellipseshape) \| [PathShape](../js-apis-arkui-shape.md#pathshape) \| [RectShape](../js-apis-arkui-shape.md#rectshape)> | Yes | Mask of the specified shape to add to the component.
If **shape** is set to **undefined**, the previous value is retained.| +**Return value** + +| Type | Description | +| ------ | ------------------------ | +| T | Current component.| + ## ProgressMask10+ Implements a **ProgressMask** object to set the progress, maximum value, and color of the mask. @@ -267,7 +343,7 @@ Sets whether to enable the breathing animation when the progress indicator is fu ```ts // xxx.ets -import { CircleShape, RectShape } from '@kit.ArkUI' +import { CircleShape, RectShape } from '@kit.ArkUI'; @Entry @Component @@ -287,12 +363,12 @@ struct ClipAndMaskExample { .width('500px').height('280px') Text('mask').fontSize(12).width('75%').fontColor('#DCDCDC') - // Add a 500 px x 280 px square mask to the image. + // Add a 500x280 px square mask to the image. Image($r('app.media.testImg')) .maskShape(new RectShape({ width: '500px', height: '280px' }).fill(Color.Gray)) .width('500px').height('280px') - // Add a 280 px x 280 px circular mask to the image. + // Add a 280x280 px circular mask to the image. Image($r('app.media.testImg')) .maskShape(new CircleShape({ width: '280px', height: '280px' }).fill(Color.Gray)) .width('500px').height('280px') @@ -311,7 +387,7 @@ struct ClipAndMaskExample { @Entry @Component struct ProgressMaskExample { - @State progressflag1: boolean = true; + @State progressFlag1: boolean = true; @State color: Color = 0x01006CDE; @State value: number = 10.0; @State enableBreathingAnimation: boolean = false; @@ -320,13 +396,13 @@ struct ProgressMaskExample { build() { Column({ space: 15 }) { Text('progress mask').fontSize(12).width('75%').fontColor('#DCDCDC') - // Add a 280 px x 280 px progress mask to the image. + // Add a 280x280 px progress mask to the image. Image($r('app.media.testImg')) .width('500px').height('280px') .mask(this.progress) .animation({ duration: 2000, // Animation duration. - .curve(Curve.Linear) // Animation curve. + curve: Curve.Linear, // Animation curve. delay: 0, // Animation delay. iterations: 1, // Number of playback times. playMode: PlayMode.Normal // Animation playback mode. @@ -342,18 +418,18 @@ struct ProgressMaskExample { // Update the color of the progress mask. Button('updateColor') .onClick((event?: ClickEvent) => { - if (this.progressflag1) { + if (this.progressFlag1) { this.progress.updateColor(0x9fff0000); } else { this.progress.updateColor(0x9f0000ff); } - this.progressflag1 = !this.progressflag1 + this.progressFlag1 = !this.progressFlag1 }).width(200).height(50).margin(20) // Enable or disable the breathing animation. Button('enableBreathingAnimation:' + this.enableBreathingAnimation) .onClick((event?: ClickEvent) => { - this.enableBreathingAnimation = !this.enableBreathingAnimation + this.enableBreathingAnimation = !this.enableBreathingAnimation; this.progress.enableBreathingAnimation(this.enableBreathingAnimation); }).width(200).height(50).margin(20) diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-size.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-size.md index 6a26b01e546..db92f31397c 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-size.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-size.md @@ -1,14 +1,16 @@ # Size -The size attributes set the width, height, and margin of a component. +The size attributes set the width, height, and margins of a component. > **NOTE** > -> The APIs of this module are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +> +> When a component's size is set by percentage, the actual size is calculated based on the size of the nearest ancestor node with a fixed size. ## width -width(value: Length) +width(value: Length): T Sets the width of the component. By default, the width required to fully hold the component content is used. If the width of the component is greater than that of the parent container, the component will be drawn beyond the parent container scope. @@ -26,6 +28,12 @@ Since API version 10, this API supports the calc calculation feature. | ----- | ---------------------------- | ---- | ------------------- | | value | [Length](ts-types.md#length) | Yes | Width of the component to set.
Unit: vp| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + > **NOTE** > > - In the [TextInput](./ts-basic-components-textinput.md) component, setting **width** to **auto** means that the width adapts to the width of the text content. @@ -34,7 +42,7 @@ Since API version 10, this API supports the calc calculation feature. ## height -height(value: Length) +height(value: Length): T Sets the height of the component. By default, the height required to fully hold the component content is used. If the height of the component is greater than that of the parent container, the component will be drawn beyond the parent container scope. @@ -52,13 +60,19 @@ Since API version 10, this API supports the calc calculation feature. | ----- | ---------------------------- | ---- | ------------------- | | value | [Length](ts-types.md#length) | Yes | Height of the component to set.
Unit: vp| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + > **NOTE** > > In the [Row](./ts-container-row.md), [Column](./ts-container-column.md), and [RelativeContainer](./ts-container-relativecontainer.md) components, setting **width** and **height** to **auto** means that the size adapts to the size of their child components. ## width15+ -width(widthValue: Length | LayoutPolicy) +width(widthValue: Length | LayoutPolicy): T Sets the width of the component or its horizontal layout policy. By default, the component uses the width required for its content. If the width of the component is greater than that of the parent container, the component will be drawn beyond the parent container scope. @@ -74,9 +88,15 @@ Sets the width of the component or its horizontal layout policy. By default, the | ----- | ---------------------------- | ---- | ------------------- | | widthValue | [Length](ts-types.md#length) \| [LayoutPolicy](ts-types.md#layoutpolicy15) | Yes | Width of the component to set.
Unit: vp| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + ## height15+ -height(heightValue: Length | LayoutPolicy) +height(heightValue: Length | LayoutPolicy): T Sets the height of the component or its vertical layout policy. By default, the component uses the height required for its content. If the height of the component is greater than that of the parent container, the component will be drawn beyond the parent container scope. @@ -92,15 +112,21 @@ Sets the height of the component or its vertical layout policy. By default, the | ----- | ---------------------------- | ---- | ------------------- | | heightValue | [Length](ts-types.md#length) \| [LayoutPolicy](ts-types.md#layoutpolicy15) | Yes | Height of the component to set.
Unit: vp| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + > **NOTE** > -> In the [Row](./ts-container-row.md) and [Column](./ts-container-column.md) components, **width** and **height** can be set to parameters of the [LayoutPolicy](ts-types.md#layoutpolicy15) type. +> The **width** and **height** attributes of the [Row](./ts-container-row.md) and [Column](./ts-container-column.md) components support parameters of the [LayoutPolicy](ts-types.md#layoutpolicy15) type. ## size -size(value: SizeOptions) +size(value: SizeOptions): T -Sets the size of the component. +Sets the width and height of the component. Since API version 10, this API supports the calc calculation feature. @@ -116,9 +142,15 @@ Since API version 10, this API supports the calc calculation feature. | ----- | ------------------------------- | ---- | ----------------- | | value | [SizeOptions](#sizeoptions) | Yes | Size of the component to set.
Unit: vp| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + ## padding -padding(value: Padding | Length | LocalizedPadding) +padding(value: Padding | Length | LocalizedPadding): T Sets the padding of the component. @@ -136,9 +168,15 @@ Since API version 10, this API supports the calc calculation feature. | ----- | ---------------------------------------- | ---- | ---------------------------------------- | | value | [Padding](ts-types.md#padding) \| [Length](ts-types.md#length) \| [LocalizedPadding](ts-types.md#localizedpadding12)12+| Yes | Padding of the component to set.
When the parameter is of the **Length** type, the four paddings take effect.
Default value: **0**
Unit: vp
When **padding** is set to a percentage, the width of the parent container is used as the basic value.| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + ## margin -margin(value: Margin | Length | LocalizedMargin) +margin(value: Margin | Length | LocalizedMargin): T Sets the margin of the component. @@ -156,11 +194,17 @@ Since API version 10, this API supports the calc calculation feature. | ------ | ------------------------------------------------------------ | -------- | ------------------------------------------------------------ | | value | [Margin](ts-types.md#margin) \| [Length](ts-types.md#length) \| [LocalizedMargin](ts-types.md#localizedmargin12)12+ | Yes| Margin of the component to set.
When the parameter is of the **Length** type, the four margins take effect.
Default value: **0**
Unit: vp
When **margin** is set to a percentage, the width of the parent container is used as the basic value. When child components are laid out along the cross axis of the [Row](./ts-container-row.md), [Column](./ts-container-column.md), or [Flex](./ts-container-flex.md) container, the cross axis size of the child components and the margins add up to the total size of the container.
For example, if the width of the **Column** container is 100, the width of the child component is 50, the left margin is 10, and the right margin is 20, then the actual horizontal offset of the child component is 10.| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + ## safeAreaPadding14+ -safeAreaPadding(value: Padding | LengthMetrics | LocalizedPadding) +safeAreaPadding(paddingValue: Padding | LengthMetrics | LocalizedPadding): T -Sets the safe area padding. It enables a container to add a component-level safe area for child components to expand into. +Sets the safe area padding. This allows the container to add a component-level safe area for its child components to extend into. **Widget capability**: This API can be used in ArkTS widgets since API version 14. @@ -174,11 +218,17 @@ Sets the safe area padding. It enables a container to add a component-level safe | ----- | ---------------------------------------- | ---- | ---------------------------------------- | | paddingValue | [Padding](ts-types.md#padding) \| [LengthMetrics](../js-apis-arkui-graphics.md#lengthmetrics12) \| [LocalizedPadding](ts-types.md#localizedpadding12)| Yes | Safe area padding.
Default value: **0**
Unit: vp| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + ## layoutWeight -layoutWeight(value: number | string) +layoutWeight(value: number | string): T -Sets the weight of the component during layout. A component with this attribute is allocated space along the main axis of its parent container ([Row](./ts-container-row.md), [Column](./ts-container-column.md), or [Flex](./ts-container-flex.md)) based on its specified weight. +Sets the weight of the component during layout. A component with this attribute set is allocated space along the main axis of its parent container ([Row](./ts-container-row.md), [Column](./ts-container-column.md), or [Flex](./ts-container-flex.md)) based on its specified weight. **Widget capability**: Since API version 9, this feature is supported in ArkTS widgets. @@ -190,11 +240,17 @@ Sets the weight of the component during layout. A component with this attribute | Name | Type | Mandatory | Description | | ----- | -------------------------- | ------- | ---------------------------------------- | -| value | number \| string | Yes| Weight of the component during layout. When the size of the parent container is determined, the container space is allocated along the main axis among the component and its sibling components based on their respective weights, ignoring their own size settings.
Default value: **0**
**NOTE**
This parameter is only effective in [Row](./ts-container-row.md), [Column](./ts-container-column.md), and [Flex](./ts-container-flex.md) container components.
The value can be a number greater than or equal to 0 or a string that can be converted to a number.
If any child component in a container has the **layoutWeight** attribute set to a value greater than 0, then child components will no longer be laid out based on **flexShrink** and **flexGrow**.| +| value | number \| string | Yes| Layout weight of the component.
When the parent container size is determined:
Elements without **layoutWeight** or with **layoutWeight** set to **0** take precedence in occupying space.
The remaining space on the main axis is then allocated proportionally among elements with a **layoutWeight** value greater than 0, ignoring their own size settings.
Default value: **0**
**NOTE**
This parameter is only effective in [Row](./ts-container-row.md), [Column](./ts-container-column.md), and [Flex](./ts-container-flex.md) container components.
The value can be a number greater than or equal to 0 or a string that can be converted to a number.
If any child component in a container has the **layoutWeight** attribute set to a value greater than 0, then child components will no longer be laid out based on **flexShrink** and **flexGrow**.| + +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| ## constraintSize -constraintSize(value: ConstraintSizeOptions) +constraintSize(value: ConstraintSizeOptions): T Sets the constraint size of the component, which is used to limit the size range during component layout. @@ -212,6 +268,12 @@ Since API version 10, this API supports the calc calculation feature. | ----- | ---------------------------------------- | ---- | ---------------------------------------- | | value | [ConstraintSizeOptions](ts-types.md#constraintsizeoptions) | Yes | Constraint size of the component to set. **constraintSize** takes precedence over **width** and **height**. See **Impact of constraintSize on width/height**.
Default value:
{
minWidth: 0,
maxWidth: Infinity,
minHeight: 0,
maxHeight: Infinity
}
Unit: vp
| +**Return value** + +| Type| Description| +| --- | --- | +| T | Current component.| + **Impact of constraintSize(minWidth/maxWidth/minHeight/maxHeight) on width/height** | Default Value | Result | @@ -228,6 +290,8 @@ Since API version 10, this API supports the calc calculation feature. ## SizeOptions +Describes the width and height of a component during layout. + **Widget capability**: Since API version 9, this feature is supported in ArkTS widgets. **Atomic service API**: This API can be used in atomic services since API version 11. @@ -239,6 +303,8 @@ Since API version 10, this API supports the calc calculation feature. ## ConstraintSizeOptions +Describes the size constraints of a component during layout. + **Widget capability**: Since API version 9, this feature is supported in ArkTS widgets. **Atomic service API**: This API can be used in atomic services since API version 11. @@ -258,7 +324,7 @@ Since API version 10, this API supports the calc calculation feature. ### Example 1: Setting the Component Width, Height, Margin, and Padding -This example demonstrates how to set the width, height, margin, and padding of a component. +This example demonstrates how to set the width, height, padding, and margin of a component. ```ts // xxx.ets @@ -271,7 +337,9 @@ struct SizeExample { Row() { // Width: 80; height: 80; margin: 20 (blue area); top, bottom, left, and right paddings: 5, 15, 10, and 20 (white area) Row() { - Row().size({ width: '100%', height: '100%' }).backgroundColor(Color.Yellow) + Row() + .size({ width: '100%', height: '100%' }) + .backgroundColor(Color.Yellow) } .width(80) .height(80) @@ -280,12 +348,18 @@ struct SizeExample { .backgroundColor(Color.White) }.backgroundColor(Color.Blue) - Text('constraintSize').fontSize(12).fontColor(0xCCCCCC).width('90%') + Text('constraintSize') + .fontSize(12) + .fontColor(0xCCCCCC) + .width('90%') Text('this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text.this is a Text') .width('90%') .constraintSize({ maxWidth: 200 }) - Text('layoutWeight').fontSize(12).fontColor(0xCCCCCC).width('90%') + Text('layoutWeight') + .fontSize(12) + .fontColor(0xCCCCCC) + .width('90%') // When the container size is determined, the component occupies the space along the main axis based on the layout weight, and the component size setting is ignored. Row() { // Weight 1: The component occupies 1/3 of the remaining space along the main axis. @@ -299,9 +373,14 @@ struct SizeExample { // If layoutWeight is not set, the component is rendered based on its own size setting. Text('no layoutWeight') .size({ width: '30%', height: 110 }).backgroundColor(0xD2B48C).textAlign(TextAlign.Center) - }.size({ width: '90%', height: 140 }).backgroundColor(0xAFEEEE) + } + .size({ width: '90%', height: 140 }) + .backgroundColor(0xAFEEEE) // calc calculation feature - Text('calc:').fontSize(12).fontColor(0xCCCCCC).width('90%') + Text('calc:') + .fontSize(12) + .fontColor(0xCCCCCC) + .width('90%') Text('calc test') .fontSize(50) .fontWeight(FontWeight.Bold) @@ -310,7 +389,9 @@ struct SizeExample { .margin('calc(25vp*2)') // If width or height is set to a percentage, the width or height of the parent container are used as the basic value. .size({ width: 'calc(90%)', height: 'calc(50vp + 10%)' }) - }.width('100%').margin({ top: 5 }) + } + .width('100%') + .margin({ top: 5 }) } } ``` @@ -319,7 +400,7 @@ struct SizeExample { ### Example 2: Using LocalizedPadding and LocalizedMargin Types -This example demonstrates how to use **LocalizedPadding** and **LocalizedMargin** types to set the padding and margin. +This example demonstrates how to use **LocalizedPadding** and **LocalizedMargin** types to define the **padding** and **margin** attributes. ```ts // xxx.ets @@ -330,11 +411,16 @@ import { LengthMetrics } from '@kit.ArkUI' struct SizeExample { build() { Column({ space: 10 }) { - Text('margin and padding:').fontSize(12).fontColor(0xCCCCCC).width('90%') + Text('margin and padding:') + .fontSize(12) + .fontColor(0xCCCCCC) + .width('90%') Row() { // Set the width to 80, height to 80, top, bottom, start, and end paddings to 40, 20, 30, and 10, respectively (blue area), and top, bottom, start, and end margins to 5, 15, 10, and 20, respectively (white area). Row() { - Row().size({ width: '100%', height: '100%' }).backgroundColor(Color.Yellow) + Row() + .size({ width: '100%', height: '100%' }) + .backgroundColor(Color.Yellow) } .width(80) .height(80) @@ -351,8 +437,11 @@ struct SizeExample { end: LengthMetrics.vp(10) }) .backgroundColor(Color.White) - }.backgroundColor(Color.Blue) - }.width('100%').margin({ top: 5 }) + } + .backgroundColor(Color.Blue) + } + .width('100%') + .margin({ top: 5 }) } } ``` diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-tips.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-tips.md index 13b08a4a544..c636790b88b 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-tips.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-tips.md @@ -26,7 +26,7 @@ Binds a tooltip to the component. | Name| Type | Mandatory| Description | | ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | message| [TipsMessageType](#tipsmessagetype) | Yes | Content of the tooltip message.| -| options | [TipsOptions](#tipsoptions) | No | Parameters of the tooltip.
Default value:
{
appearingTime: 700,
disappearingTime: 300,
appearingTimeWithContinuousOperation: 300,
disappearingTimeWithContinuousOperation: 0, enableArrow: true,
arrowPointPosition: ArrowPointPosition.CENTER,
arrowWidth: 16,arrowHeight: 8vp,
showAtAnchor: TipsAnchorType.TARGET
} | +| options | [TipsOptions](#tipsoptions) | No | Parameters of the tooltip.
Default value:
{
appearingTime: 700,
disappearingTime: 300,
appearingTimeWithContinuousOperation: 300,
disappearingTimeWithContinuousOperation: 0, enableArrow: true,
arrowPointPosition: ArrowPointPosition.CENTER,
arrowWidth: 16,arrowHeight: 8vp
} | **Return value** diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-use-effect.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-use-effect.md index 8f99e6303e1..2e39cddc842 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-use-effect.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-use-effect.md @@ -9,7 +9,7 @@ The **useEffect** attribute is used to combine the drawing of special effects, s ## useEffect -useEffect(value: boolean) +useEffect(value: boolean): T Specifies whether to combine the drawing of special effects, such as background blur. @@ -21,11 +21,17 @@ Specifies whether to combine the drawing of special effects, such as background | Name| Type| Mandatory| Description| | -------- | -------- | -------- | -------- | -| value | boolean | Yes| Whether the component inherits the special effect settings of the **EffectComponent** component.
The value **true** means that the component inherits the special effect settings of the **EffectComponent** component, and **false** means the opposite.
Default value: **false**| +| value | boolean | Yes| Whether the component inherits the special effect settings of the **EffectComponent** component.
The value **true** means the component inherits the special effect settings of the **EffectComponent** component, and **false** means the opposite.
Default value: **false**| + +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| ## useEffect14+ -useEffect(useEffect: boolean, effectType: EffectType) +useEffect(useEffect: boolean, effectType: EffectType): T Specifies whether to apply the effect defined by the parent [EffectComponent](ts-container-effectcomponent-sys.md) or the window. @@ -40,11 +46,17 @@ Specifies whether to apply the effect defined by the parent [EffectCom | useEffect | boolean | Yes | Whether to apply the effect defined by the parent **EffectComponent** or the window.
The value **true** means to apply the effect defined by the parent **EffectComponent** or the window.
Default value: **false**| | effectType | [EffectType](ts-universal-attributes-use-effect.md#effecttype14) | Yes | Type of effect to apply to the component, which is defined by the parent **EffectComponent** or the window.
Default value: **EffectType.DEFAULT**| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| + ## useEffect18+ -useEffect(useEffect: Optional\, effectType?: EffectType) +useEffect(useEffect: Optional\, effectType?: EffectType): T -Specifies whether to apply the effect defined by the parent [EffectComponent](ts-container-effectcomponent-sys.md) or the window. Compared to [useEffect14+](#useeffect), this API supports the **undefined** type for the **useEffect** parameter. +Specifies whether to apply the effect defined by the parent [EffectComponent](ts-container-effectcomponent-sys.md) or the window. Compared to [useEffect14+](#useeffect), the **useEffect** parameter supports the **undefined** type. **Atomic service API**: This API can be used in atomic services since API version 18. @@ -57,6 +69,12 @@ Specifies whether to apply the effect defined by the parent [EffectCom | useEffect | Optional\ | Yes| Whether to apply the effect defined by the parent **EffectComponent** or the window.
The value **true** means to apply the effect defined by the parent **EffectComponent** or the window.
Default value: **false**
If **useEffect** is set to **undefined**, the previous value is retained.| | effectType | [EffectType](ts-universal-attributes-use-effect.md#effecttype14) | No| Type of effect to apply to the component, which is defined by the parent **EffectComponent** or the window.
Default value: **EffectType.DEFAULT**| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| + ## EffectType14+ Enumerates the types of effect templates. @@ -74,16 +92,18 @@ Effect Template | Device Type | Fuzzy Radius (Unit: px) | Saturation | Brightness | Color | | -------- | ---- | ---------------------- | -------- | -------- | -| Mobile device | 0 | 0 | 0 | '#ffffffff' | -| 2-in-1 device: dark mode | 80 | 1.5 | 1.0 | '#e52e3033' | -| 2-in-1 device: light mode | 80 | 1.9 | 1.0 | '#e5ffffff' | -| Tablet | 0 | 0 | 0 | '#ffffffff' | +| Mobile device | 0 | 0 | 0 | '#ffffffff' +| 2-in-1 device: dark mode | 80 | 1.5 | 1.0 | '#e52e3033' +| 2-in-1 device: light mode | 80 | 1.9 | 1.0 | '#e5ffffff' +| Tablet | 0 | 0 | 0 | '#ffffffff' ## Example This example shows how to combine the drawing of special effects, including background blur. + + ```ts //Index.ets @Entry diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-visibility.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-visibility.md index 38882580628..c10954399f3 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-visibility.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-visibility.md @@ -4,13 +4,13 @@ The visibility attribute controls whether a component is visible. > **NOTE** > -> This event is supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. ## visibility -visibility(value: Visibility) +visibility(value: Visibility): T -Sets the visibility of this component. +Sets the visibility of the component. **Widget capability**: Since API version 9, this feature is supported in ArkTS widgets. @@ -24,6 +24,12 @@ Sets the visibility of this component. | ------ | --------------------------------------------- | ---- | ------------------------------------------------------------ | | value | [Visibility](ts-appendix-enums.md#visibility) | Yes | Whether the component is visible. When appropriate, consider using [conditional rendering](../../../ui/state-management/arkts-rendering-control-ifelse.md) as a substitute.
Default value: **Visibility.Visible**| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| + ## Example diff --git a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-z-order.md b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-z-order.md index 990e2247b54..dda387fe35c 100644 --- a/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-z-order.md +++ b/en/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-z-order.md @@ -4,11 +4,11 @@ The **zIndex** attribute sets the z-order of a component in the stacking context > **NOTE** > -> The APIs of this module are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. +> The initial APIs of this module are supported since API version 7. Updates will be marked with a superscript to indicate their earliest API version. ## zIndex -zIndex(value: number) +zIndex(value: number): T Sets the stack level of the component. @@ -24,6 +24,11 @@ Sets the stack level of the component. | ------ | ------ | ---- | ------------------------------------------------------------ | | value | number | Yes | Stacking order of the component relative to its sibling components in a container. The components with a larger z-index value cover those with a smaller one. When dynamically changing zIndex does not involve adding or removing sibling nodes, the components are sorted stably based on their previous stack level.| +**Return value** + +| Type| Description| +| -------- | -------- | +| T | Current component.| ## Example @@ -39,7 +44,7 @@ struct ZIndexExample { build() { Column() { Stack() { - // Components are stacked. By default, the component defined later is on the top. A component with a larger zIndex value is displayed before one with a smaller zIndex value. + // Components in the stack layout overlap. By default, later-defined elements are on top. Elements with higher zIndex values appear in front of those with lower zIndex values. Text('1, zIndex(2)') .size({ width: '40%', height: '30%' }).backgroundColor(0xbbb2cb) .zIndex(2) @@ -99,6 +104,6 @@ Effect after clicking the **Button** component to dynamically change **zIndex** ![zIndex_1.png](figures/zIndex_1.png) -Effect after clicking the **Button** component to dynamically change **zIndex** so that **Text1** has a higher **zIndex** value than **Text2** +Effect after the **Button** component is clicked to dynamically change **zIndex** so that **Text1** has a higher **zIndex** value than **Text2** ![zIndex_2.png](figures/zIndex_2.png) diff --git a/en/application-dev/reference/apis-arkui/native__interface__xcomponent_8h.md b/en/application-dev/reference/apis-arkui/native__interface__xcomponent_8h.md index 1ffd780f23b..8b4c9afc12c 100644 --- a/en/application-dev/reference/apis-arkui/native__interface__xcomponent_8h.md +++ b/en/application-dev/reference/apis-arkui/native__interface__xcomponent_8h.md @@ -7,7 +7,7 @@ Declares the APIs for accessing **NativeXComponent**. **Library**: libace_ndk.z.so -**Header file**: +**File to include**: **Since**: 8 @@ -22,7 +22,8 @@ Declares the APIs for accessing **NativeXComponent**. | Name| Description| | -------- | -------- | | struct [OH_NativeXComponent_TouchPoint](_o_h___native_x_component___touch_point.md) | Describes the touch point of the touch event.| -| struct [OH_NativeXComponent_TouchEvent](_o_h___native_x_component___touch_event.md) | Describes the touch event. | +| struct [OH_NativeXComponent_TouchEvent](_o_h___native_x_component___touch_event.md) | Defines the touch event. | +| struct [OH_NativeXComponent_HistoricalPoint](_o_h___native_x_component___historical_point.md) | Defines the historical touch point.| | struct [OH_NativeXComponent_MouseEvent](_o_h___native_x_component___mouse_event.md) | Describes the mouse event. | | struct [OH_NativeXComponent_Callback](_o_h___native_x_component___callback.md) | Registers callbacks for the surface lifecycle and touch event. | | struct [OH_NativeXComponent_MouseEvent_Callback](_o_h___native_x_component___mouse_event___callback.md) | Registers callbacks for the mouse event. | @@ -33,40 +34,51 @@ Declares the APIs for accessing **NativeXComponent**. | Name| Description| | -------- | -------- | -| typedef struct [OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent)[OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) | Provides an encapsulated **OH_NativeXComponent** instance. | -| typedef struct [OH_NativeXComponent_Callback](_o_h___native_x_component___callback.md)[OH_NativeXComponent_Callback](_o_h___native_x_component.md#oh_nativexcomponent_callback) | Registers callbacks for the surface lifecycle and touch event. | -| typedef struct [OH_NativeXComponent_MouseEvent_Callback](_o_h___native_x_component___mouse_event___callback.md)[OH_NativeXComponent_MouseEvent_Callback](_o_h___native_x_component.md#oh_nativexcomponent_mouseevent_callback) | Registers callbacks for the mouse event. | -| typedef struct [OH_NativeXComponent_KeyEvent](_o_h___native_x_component.md#oh_nativexcomponent_keyevent)[OH_NativeXComponent_KeyEvent](_o_h___native_x_component.md#oh_nativexcomponent_keyevent) | Provides an encapsulated **OH_NativeXComponent_KeyEvent** instance. | +| typedef struct [OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) [OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) | Provides an encapsulated **OH_NativeXComponent** instance. | +| typedef struct [OH_NativeXComponent_Callback](_o_h___native_x_component___callback.md) [OH_NativeXComponent_Callback](_o_h___native_x_component.md#oh_nativexcomponent_callback) | Registers callbacks for the surface lifecycle and touch event. | +| typedef struct [OH_NativeXComponent_MouseEvent_Callback](_o_h___native_x_component___mouse_event___callback.md) [OH_NativeXComponent_MouseEvent_Callback](_o_h___native_x_component.md#oh_nativexcomponent_mouseevent_callback) | Registers callbacks for the mouse event. | +| typedef struct [OH_NativeXComponent_KeyEvent](_o_h___native_x_component.md#oh_nativexcomponent_keyevent) [OH_NativeXComponent_KeyEvent](_o_h___native_x_component.md#oh_nativexcomponent_keyevent) | Provides an encapsulated **OH_NativeXComponent_KeyEvent** instance.| +| typedef struct [OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback) [OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback) | Defines Surface lifecycle callback functions.| +| typedef struct [OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder) [OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder) | Provides an encapsulated **OH_ArkUI_SurfaceHolder** instance.| +| typedef struct NativeWindow [OHNativeWindow](_o_h___native_x_component.md#ohnativewindow) | Provides an encapsulated **NativeWindow** instance.| ### Enums | Name| Description| | -------- | -------- | -| { [OH_NATIVEXCOMPONENT_RESULT_SUCCESS](_o_h___native_x_component.md) = 0, [OH_NATIVEXCOMPONENT_RESULT_FAILED](_o_h___native_x_component.md) = -1, [OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER](_o_h___native_x_component.md) = -2 } | Enumerates the API access states. | -| [OH_NativeXComponent_TouchEventType](_o_h___native_x_component.md#oh_nativexcomponent_toucheventtype) {
[OH_NATIVEXCOMPONENT_DOWN](_o_h___native_x_component.md) = 0, [OH_NATIVEXCOMPONENT_UP](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_MOVE](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_CANCEL](_o_h___native_x_component.md),
[OH_NATIVEXCOMPONENT_UNKNOWN](_o_h___native_x_component.md)
} | Enumerates the touch event types. | -| [OH_NativeXComponent_TouchPointToolType](_o_h___native_x_component.md#oh_nativexcomponent_touchpointtooltype) {
[OH_NATIVEXCOMPONENT_TOOL_TYPE_UNKNOWN](_o_h___native_x_component.md) = 0, [OH_NATIVEXCOMPONENT_TOOL_TYPE_FINGER](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_TOOL_TYPE_PEN](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_TOOL_TYPE_RUBBER](_o_h___native_x_component.md),
[OH_NATIVEXCOMPONENT_TOOL_TYPE_BRUSH](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_TOOL_TYPE_PENCIL](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_TOOL_TYPE_AIRBRUSH](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_TOOL_TYPE_MOUSE](_o_h___native_x_component.md),
[OH_NATIVEXCOMPONENT_TOOL_TYPE_LENS](_o_h___native_x_component.md)
} | Enumerates the touch point tool types. | -| [OH_NativeXComponent_EventSourceType](_o_h___native_x_component.md#oh_nativexcomponent_eventsourcetype) {
[OH_NATIVEXCOMPONENT_SOURCE_TYPE_UNKNOWN](_o_h___native_x_component.md) = 0, [OH_NATIVEXCOMPONENT_SOURCE_TYPE_MOUSE](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_SOURCE_TYPE_TOUCHSCREEN](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_SOURCE_TYPE_TOUCHPAD](_o_h___native_x_component.md),
[OH_NATIVEXCOMPONENT_SOURCE_TYPE_JOYSTICK](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_SOURCE_TYPE_KEYBOARD](_o_h___native_x_component.md)
} | Enumerates the touch event source types. | -| [OH_NativeXComponent_MouseEventAction](_o_h___native_x_component.md#oh_nativexcomponent_mouseeventaction) { [OH_NATIVEXCOMPONENT_MOUSE_NONE](_o_h___native_x_component.md) = 0, [OH_NATIVEXCOMPONENT_MOUSE_PRESS](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_MOUSE_RELEASE](_o_h___native_x_component.md), [OH_NATIVEXCOMPONENT_MOUSE_MOVE](_o_h___native_x_component.md) } | Enumerates the mouse event actions. | -| [OH_NativeXComponent_MouseEventButton](_o_h___native_x_component.md#oh_nativexcomponent_mouseeventbutton) {
[OH_NATIVEXCOMPONENT_NONE_BUTTON](_o_h___native_x_component.md) = 0, [OH_NATIVEXCOMPONENT_LEFT_BUTTON](_o_h___native_x_component.md) = 0x01, [OH_NATIVEXCOMPONENT_RIGHT_BUTTON](_o_h___native_x_component.md) = 0x02, [OH_NATIVEXCOMPONENT_MIDDLE_BUTTON](_o_h___native_x_component.md) = 0x04,
[OH_NATIVEXCOMPONENT_BACK_BUTTON](_o_h___native_x_component.md) = 0x08, [OH_NATIVEXCOMPONENT_FORWARD_BUTTON](_o_h___native_x_component.md) = 0x10
} | Enumerates the mouse event buttons. | +| { OH_NATIVEXCOMPONENT_RESULT_SUCCESS = 0, OH_NATIVEXCOMPONENT_RESULT_FAILED = -1, OH_NATIVEXCOMPONENT_RESULT_BAD_PARAMETER = -2 } | Enumerates the API access states. | +| [OH_NativeXComponent_TouchEventType](_o_h___native_x_component.md#oh_nativexcomponent_toucheventtype) {
OH_NATIVEXCOMPONENT_DOWN = 0, OH_NATIVEXCOMPONENT_UP, OH_NATIVEXCOMPONENT_MOVE, OH_NATIVEXCOMPONENT_CANCEL,
OH_NATIVEXCOMPONENT_UNKNOWN
} | Enumerates the touch event types. | +| [OH_NativeXComponent_TouchPointToolType](_o_h___native_x_component.md#oh_nativexcomponent_touchpointtooltype) {
OH_NATIVEXCOMPONENT_TOOL_TYPE_UNKNOWN = 0, OH_NATIVEXCOMPONENT_TOOL_TYPE_FINGER, OH_NATIVEXCOMPONENT_TOOL_TYPE_PEN, OH_NATIVEXCOMPONENT_TOOL_TYPE_RUBBER,
OH_NATIVEXCOMPONENT_TOOL_TYPE_BRUSH, OH_NATIVEXCOMPONENT_TOOL_TYPE_PENCIL, OH_NATIVEXCOMPONENT_TOOL_TYPE_AIRBRUSH, OH_NATIVEXCOMPONENT_TOOL_TYPE_MOUSE,
OH_NATIVEXCOMPONENT_TOOL_TYPE_LENS
} | Enumerates the touch point tool types. | +| [OH_NativeXComponent_EventSourceType](_o_h___native_x_component.md#oh_nativexcomponent_eventsourcetype) {
OH_NATIVEXCOMPONENT_SOURCE_TYPE_UNKNOWN = 0, OH_NATIVEXCOMPONENT_SOURCE_TYPE_MOUSE, OH_NATIVEXCOMPONENT_SOURCE_TYPE_TOUCHSCREEN, OH_NATIVEXCOMPONENT_SOURCE_TYPE_TOUCHPAD,
OH_NATIVEXCOMPONENT_SOURCE_TYPE_JOYSTICK, OH_NATIVEXCOMPONENT_SOURCE_TYPE_KEYBOARD
} | Enumerates the touch event source types. | +| [OH_NativeXComponent_TouchEvent_SourceTool](_o_h___native_x_component.md#oh_nativexcomponent_touchevent_sourcetool) {
OH_NATIVEXCOMPONENT_SOURCETOOL_UNKNOWN = 0, OH_NATIVEXCOMPONENT_SOURCETOOL_FINGER, OH_NATIVEXCOMPONENT_SOURCETOOL_PEN, OH_NATIVEXCOMPONENT_SOURCETOOL_RUBBER,
OH_NATIVEXCOMPONENT_SOURCETOOL_BRUSH, OH_NATIVEXCOMPONENT_SOURCETOOL_PENCIL, OH_NATIVEXCOMPONENT_SOURCETOOL_AIRBRUSH, OH_NATIVEXCOMPONENT_SOURCETOOL_MOUSE,
OH_NATIVEXCOMPONENT_SOURCETOOL_LENS, OH_NATIVEXCOMPONENT_SOURCETOOL_TOUCHPAD
} | Enumerates the source tool types of touch events.| +| [OH_NativeXComponent_MouseEventAction](_o_h___native_x_component.md#oh_nativexcomponent_mouseeventaction) {
OH_NATIVEXCOMPONENT_MOUSE_NONE = 0, OH_NATIVEXCOMPONENT_MOUSE_PRESS, OH_NATIVEXCOMPONENT_MOUSE_RELEASE, OH_NATIVEXCOMPONENT_MOUSE_MOVE,
OH_NATIVEXCOMPONENT_MOUSE_CANCEL
} | Enumerates mouse event actions.| +| [OH_NativeXComponent_MouseEventButton](_o_h___native_x_component.md#oh_nativexcomponent_mouseeventbutton) {
OH_NATIVEXCOMPONENT_NONE_BUTTON = 0, OH_NATIVEXCOMPONENT_LEFT_BUTTON = 0x01, OH_NATIVEXCOMPONENT_RIGHT_BUTTON = 0x02, OH_NATIVEXCOMPONENT_MIDDLE_BUTTON = 0x04,
OH_NATIVEXCOMPONENT_BACK_BUTTON = 0x08, OH_NATIVEXCOMPONENT_FORWARD_BUTTON = 0x10
} | Enumerates the mouse event buttons. | +|[ArkUI_XComponent_ImageAnalyzerState](_o_h___native_x_component.md#arkui_xcomponent_imageanalyzerstate) { ARKUI_XCOMPONENT_AI_ANALYSIS_FINISHED = 0, ARKUI_XCOMPONENT_AI_ANALYSIS_DISABLED = 110000, ARKUI_XCOMPONENT_AI_ANALYSIS_UNSUPPORTED = 110001, ARKUI_XCOMPONENT_AI_ANALYSIS_ONGOING = 110002, ARKUI_XCOMPONENT_AI_ANALYSIS_STOPPED = 110003}|Enumerates the AI image analyzer error codes of the XComponent.| ### Functions | Name| Description| | -------- | -------- | -| int32_t [OH_NativeXComponent_GetXComponentId](_o_h___native_x_component.md#oh_nativexcomponent_getxcomponentid) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, char \*id, uint64_t \*size) | Obtains the ID of ArkUI XComponent. | +| int32_t [OH_NativeXComponent_GetXComponentId](_o_h___native_x_component.md#oh_nativexcomponent_getxcomponentid) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, char \*id, uint64_t \*size) | Obtain the ID of ArkUI XComponent. | | int32_t [OH_NativeXComponent_GetXComponentSize](_o_h___native_x_component.md#oh_nativexcomponent_getxcomponentsize) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, const void \*window, uint64_t \*width, uint64_t \*height) | Obtains the size of the surface held by the ArkUI XComponent. | | int32_t [OH_NativeXComponent_GetXComponentOffset](_o_h___native_x_component.md#oh_nativexcomponent_getxcomponentoffset) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, const void \*window, double \*x, double \*y) | Obtains the offset of the ArkUI XComponent relative to the upper left vertex of the screen. | | int32_t [OH_NativeXComponent_GetTouchEvent](_o_h___native_x_component.md#oh_nativexcomponent_gettouchevent) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, const void \*window, [OH_NativeXComponent_TouchEvent](_o_h___native_x_component___touch_event.md) \*touchEvent) | Obtains the touch event scheduled by the ArkUI XComponent. | | int32_t [OH_NativeXComponent_GetTouchPointToolType](_o_h___native_x_component.md#oh_nativexcomponent_gettouchpointtooltype) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, uint32_t pointIndex, [OH_NativeXComponent_TouchPointToolType](_o_h___native_x_component.md#oh_nativexcomponent_touchpointtooltype) \*toolType) | Obtains the ArkUI XComponent touch point tool type. | | int32_t [OH_NativeXComponent_GetTouchPointTiltX](_o_h___native_x_component.md#oh_nativexcomponent_gettouchpointtiltx) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, uint32_t pointIndex, float \*tiltX) | Obtains the angle between the Y-Z plane of the ArkUI XComponent touch point and the x-axis. | | int32_t [OH_NativeXComponent_GetTouchPointTiltY](_o_h___native_x_component.md#oh_nativexcomponent_gettouchpointtilty) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, uint32_t pointIndex, float \*tiltY) | Obtains the angle between the X-Z plane of the ArkUI XComponent touch point and the y-axis. | +| int32_t [OH_NativeXComponent_GetTouchPointWindowX](_o_h___native_x_component.md#oh_nativexcomponent_gettouchpointwindowx) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, uint32_t pointIndex, float \*windowX) | Obtains the X coordinate of the touch point relative to the upper left corner of the application window where the ArkUI XComponent is located. | +| int32_t [OH_NativeXComponent_GetTouchPointWindowY](_o_h___native_x_component.md#oh_nativexcomponent_gettouchpointwindowy) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, uint32_t pointIndex, float \*windowY) | Obtains the Y coordinate of the touch point relative to the upper left corner of the application window where the ArkUI XComponent is located. | +| int32_t [OH_NativeXComponent_GetTouchPointDisplayX](_o_h___native_x_component.md#oh_nativexcomponent_gettouchpointdisplayx) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, uint32_t pointIndex, float \*displayX) | Obtains the X coordinate of the touch point relative to the upper left corner of the screen where the ArkUI XComponent is located. | +| int32_t [OH_NativeXComponent_GetTouchPointDisplayY](_o_h___native_x_component.md#oh_nativexcomponent_gettouchpointdisplayy) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, uint32_t pointIndex, float \*displayY) | Obtains the Y coordinate of the touch point relative to the upper left corner of the screen where the ArkUI XComponent is located. | +| int32_t [OH_NativeXComponent_GetHistoricalPoints](_o_h___native_x_component.md#oh_nativexcomponent_gethistoricalpoints) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, const void \*window, int32_t \*size, [OH_NativeXComponent_HistoricalPoint](_o_h___native_x_component___historical_point.md) \*\*historicalPoints) | Obtains the historical touch points of the XComponent. | | int32_t [OH_NativeXComponent_GetMouseEvent](_o_h___native_x_component.md#oh_nativexcomponent_getmouseevent) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, const void \*window, [OH_NativeXComponent_MouseEvent](_o_h___native_x_component___mouse_event.md) \*mouseEvent) | Obtains the mouse event scheduled by ArkUI XComponent. | | int32_t [OH_NativeXComponent_RegisterCallback](_o_h___native_x_component.md#oh_nativexcomponent_registercallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [OH_NativeXComponent_Callback](_o_h___native_x_component___callback.md) \*callback) | Registers a callback for this **OH_NativeXComponent** instance. | | int32_t [OH_NativeXComponent_RegisterMouseEventCallback](_o_h___native_x_component.md#oh_nativexcomponent_registermouseeventcallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [OH_NativeXComponent_MouseEvent_Callback](_o_h___native_x_component___mouse_event___callback.md) \*callback) | Registers the mouse event callback for this **OH_NativeXComponent** instance. | | int32_t [OH_NativeXComponent_RegisterFocusEventCallback](_o_h___native_x_component.md#oh_nativexcomponent_registerfocuseventcallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void \*window)) | Registers the focus obtaining event callback for this **OH_NativeXComponent** instance. | | int32_t [OH_NativeXComponent_RegisterKeyEventCallback](_o_h___native_x_component.md#oh_nativexcomponent_registerkeyeventcallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void \*window)) | Registers the key event callback for this **OH_NativeXComponent** instance. | +| int32_t [OH_NativeXComponent_RegisterKeyEventCallbackWithResult](_o_h___native_x_component.md#oh_nativexcomponent_registerkeyeventcallbackwithresult) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, bool(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void \*window)) | Registers a key event callback with a return value for this **OH_NativeXComponent** instance. | | int32_t [OH_NativeXComponent_RegisterBlurEventCallback](_o_h___native_x_component.md#oh_nativexcomponent_registerblureventcallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void \*window)) | Registers the focus loss event callback for this **OH_NativeXComponent** instance. | | int32_t [OH_NativeXComponent_GetKeyEvent](_o_h___native_x_component.md#oh_nativexcomponent_getkeyevent) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [OH_NativeXComponent_KeyEvent](_o_h___native_x_component.md#oh_nativexcomponent_keyevent) \*\*keyEvent) | Obtains the key event scheduled by ArkUI XComponent. | | int32_t [OH_NativeXComponent_GetKeyEventAction](_o_h___native_x_component.md#oh_nativexcomponent_getkeyeventaction) ([OH_NativeXComponent_KeyEvent](_o_h___native_x_component.md#oh_nativexcomponent_keyevent) \*keyEvent, [OH_NativeXComponent_KeyAction](_o_h___native_x_component.md#oh_nativexcomponent_keyaction) \*action) | Obtains the action of the specified key event. | @@ -80,12 +92,33 @@ Declares the APIs for accessing **NativeXComponent**. | int32_t [OH_NativeXComponent_AttachNativeRootNode](_o_h___native_x_component.md#oh_nativexcomponent_attachnativerootnode) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) root) | Attaches the UI component created through the native API of ArkUI to this **OH_NativeXComponent** instance. | | int32_t [OH_NativeXComponent_DetachNativeRootNode](_o_h___native_x_component.md#oh_nativexcomponent_detachnativerootnode) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) root) | Detaches the native component of ArkUI from this **OH_NativeXComponent** instance. | | int32_t [OH_NativeXComponent_RegisterUIInputEventCallback](_o_h___native_x_component.md#oh_nativexcomponent_registeruiinputeventcallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [ArkUI_UIInputEvent](_ark_u_i___event_module.md#arkui_uiinputevent) \*event, [ArkUI_UIInputEvent_Type](_ark_u_i___event_module.md#arkui_uiinputevent_type) type), [ArkUI_UIInputEvent_Type](_ark_u_i___event_module.md#arkui_uiinputevent_type) type) | Registers a UI input event callback for an **OH_NativeXComponent** instance and enables the callback to be invoked when a UI input event is received. | -| int32_t [OH_NativeXComponent_RegisterOnTouchInterceptCallback](_o_h___native_x_component.md#oh_nativexcomponent_registerontouchinterceptcallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [HitTestMode](_ark_u_i___native_module.md#arkui_hittestmode)(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [ArkUI_UIInputEvent](_ark_u_i___event_module.md#arkui_uiinputevent) \*event)) | Registers a custom event intercept callback for an **OH_NativeXComponent** and enables the callback during the hit test. | +| int32_t [OH_NativeXComponent_RegisterOnTouchInterceptCallback](_o_h___native_x_component.md#oh_nativexcomponent_registerontouchinterceptcallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [HitTestMode](_ark_u_i___event_module.md#hittestmode)(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [ArkUI_UIInputEvent](_ark_u_i___event_module.md#arkui_uiinputevent) \*event)) | Registers a custom event intercept callback for an **OH_NativeXComponent** and enables the callback during the hit test. | | int32_t [OH_NativeXComponent_SetNeedSoftKeyboard](_o_h___native_x_component.md#oh_nativexcomponent_setneedsoftkeyboard) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, bool needSoftKeyboard) | Sets whether the soft keyboard is required for an **OH_NativeXComponent** instance. | | int32_t [OH_NativeXComponent_RegisterSurfaceShowCallback](_o_h___native_x_component.md#oh_nativexcomponent_registersurfaceshowcallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void \*window)) | Registers a surface display callback for an **OH_NativeXComponent** instance. The callback is invoked whenever the application is switched to the foreground. | | int32_t [OH_NativeXComponent_RegisterSurfaceHideCallback](_o_h___native_x_component.md#oh_nativexcomponent_registersurfacehidecallback) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void \*window)) | Registers a surface hiding callback for an **OH_NativeXComponent** instance. The callback is invoked whenever the application is switched to the background. | | int32_t [OH_NativeXComponent_GetTouchEventSourceType](_o_h___native_x_component.md#oh_nativexcomponent_gettoucheventsourcetype) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, int32_t pointId, [OH_NativeXComponent_EventSourceType](_o_h___native_x_component.md#oh_nativexcomponent_eventsourcetype) \*sourceType) | Obtains the touch event source type of an **OH_NativeXComponent** instance. | | [OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \* [OH_NativeXComponent_GetNativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent_getnativexcomponent) ([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node) | Obtains the pointer to an **OH_NativeXComponent** instance based on the specified component instance created by the native API. | +| int32_t [OH_NativeXComponent_GetNativeAccessibilityProvider](_o_h___native_x_component.md#oh_nativexcomponent_getnativeaccessibilityprovider) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, [ArkUI_AccessibilityProvider](./arkui_native_interface_accessibility.md#arkui_accessibilityprovider) \*\*handle) | Obtains the accessibility provider handle for an ArkUI XComponent. | +| int32_t [OH_NativeXComponent_RegisterKeyEventCallbackWithResult](_o_h___native_x_component.md#oh_nativexcomponent_registerkeyeventcallbackwithresult) ([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, bool(\*callback)([OH_NativeXComponent](_o_h___native_x_component.md#oh_nativexcomponent) \*component, void \*window)) | Registers a key event callback with a return value for this **OH_NativeXComponent** instance. | +|int32_t [OH_ArkUI_XComponent_StartImageAnalyzer](_o_h___native_x_component.md#oh_arkui_xcomponent_startimageanalyzer) ([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node, void \*userData,void (\*callback)([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node, [ArkUI_XComponent_ImageAnalyzerState](_o_h___native_x_component.md#arkui_xcomponent_imageanalyzerstate) statusCode, void \*userData))|Starts AI image analysis for this XComponent instance.| +|int32_t [OH_ArkUI_XComponent_StopImageAnalyzer](_o_h___native_x_component.md#oh_arkui_xcomponent_stopimageanalyzer)([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node)|Stops AI image analysis for this XComponent instance.| +|[OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback)* [OH_ArkUI_SurfaceCallback_Create](_o_h___native_x_component.md#oh_arkui_surfacecallback_create)()|Creates an **OH_ArkUI_SurfaceCallback** object.| +|void [OH_ArkUI_SurfaceCallback_Dispose](_o_h___native_x_component.md#oh_arkui_surfacecallback_dispose)([OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback)* callback)|Disposes of an **OH_ArkUI_SurfaceCallback** object.| +|[OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)* [OH_ArkUI_SurfaceHolder_Create](_o_h___native_x_component.md#oh_arkui_surfaceholder_create)([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node)|Creates an **OH_ArkUI_SurfaceHolder** object for an XComponent.| +|void [OH_ArkUI_SurfaceHolder_Dispose](_o_h___native_x_component.md#oh_arkui_surfaceholder_dispose)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)* surfaceHolder)|Disposes of an **OH_ArkUI_SurfaceHolder** object.| +|int32_t [OH_ArkUI_SurfaceHolder_SetUserData](_o_h___native_x_component.md#oh_arkui_surfaceholder_setuserdata)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)* surfaceHolder,void* userData)|Stores custom data in an **OH_ArkUI_SurfaceHolder** instance.| +|void* [OH_ArkUI_SurfaceHolder_GetUserData](_o_h___native_x_component.md#oh_arkui_surfaceholder_getuserdata)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)* surfaceHolder)|Obtains the custom data stored in an **OH_ArkUI_SurfaceHolder** instance.| +|void [OH_ArkUI_SurfaceCallback_SetSurfaceCreatedEvent](_o_h___native_x_component.md#oh_arkui_surfacecallback_setsurfacecreatedevent)([OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback)* callback,void (\*onSurfaceCreated)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)\* surfaceHolder))|Sets the creation callback event in the Surface lifecycle callback.| +|void [OH_ArkUI_SurfaceCallback_SetSurfaceChangedEvent](_o_h___native_x_component.md#oh_arkui_surfacecallback_setsurfacechangedevent)([OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback)* callback,void (\*onSurfaceChanged)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)\* surfaceHolder,uint64_t width,uint64_t height))|Sets the size change callback event in the Surface lifecycle callback. | +|void [OH_ArkUI_SurfaceCallback_SetSurfaceDestroyedEvent](_o_h___native_x_component.md#oh_arkui_surfacecallback_setsurfacedestroyedevent)([OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback)* callback,void (\*onSurfaceDestroyed)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)\* surfaceHolder))|Sets the destruction callback event in the Surface lifecycle callback.| +|int32_t [OH_ArkUI_SurfaceHolder_AddSurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfaceholder_addsurfacecallback)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)* surfaceHolder,[OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback)* callback)|Adds a Surface lifecycle callback to an **OH_ArkUI_SurfaceHolder** instance.| +|int32_t [OH_ArkUI_SurfaceHolder_RemoveSurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfaceholder_removesurfacecallback)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)* surfaceHolder,[OH_ArkUI_SurfaceCallback](_o_h___native_x_component.md#oh_arkui_surfacecallback)* callback)|Removes a previously added Surface lifecycle callback from an **OH_ArkUI_SurfaceHolder** instance.| +|[OHNativeWindow](_o_h___native_x_component.md#ohnativewindow)* [OH_ArkUI_XComponent_GetNativeWindow](_o_h___native_x_component.md#oh_arkui_xcomponent_getnativewindow)([OH_ArkUI_SurfaceHolder](_o_h___native_x_component.md#oh_arkui_surfaceholder)* surfaceHolder)|Obtains the **NativeWindow** instance associated with an **OH_ArkUI_SurfaceHolder** instance.| +|int32_t [OH_ArkUI_XComponent_SetAutoInitialize](_o_h___native_x_component.md#oh_arkui_xcomponent_setautoinitialize)([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node,bool autoInitialize)|Sets whether the XComponent needs to automatically initialize the Surface.| +|int32_t [OH_ArkUI_XComponent_Initialize](_o_h___native_x_component.md#oh_arkui_xcomponent_initialize)([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node)|Initializes the Surface held by the XComponent.| +|int32_t [OH_ArkUI_XComponent_Finalize](_o_h___native_x_component.md#oh_arkui_xcomponent_finalize)([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node)|Destroys the Surface held by the XComponent.| +|int32_t [OH_ArkUI_XComponent_IsInitialized](_o_h___native_x_component.md#oh_arkui_xcomponent_isinitialized)([ArkUI_NodeHandle](_ark_u_i___native_module.md#arkui_nodehandle) node, bool* isInitialized)|Checks whether the Surface held by the XComponent is initialized.| + ### Variables -- Gitee