电子产业一站式赋能平台

PCB联盟网

搜索
查看: 295|回复: 0
收起左侧

HarmonyOS学习路之开发篇—Java UI框架(Table Layout)

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

积分
8805
发表于 2023-8-9 12:00:00 | 显示全部楼层 |阅读模式

j4bsmruiqsx64011339950.gif

j4bsmruiqsx64011339950.gif
+ T# J+ `& w! h5 G
点击上方蓝色字体,关注我们
7 Z- e7 N: B9 P1 m/ ~0 f3 o3 Q" xTablelayout使用表格的方式划分子组件。% A8 B0 M! K  I1 B9 Q9 B7 E6 w2 F4 x
7 p: F( j/ g7 Q4 P# t6 b7 S/ y

5l1kfilmr5h64011340050.png

5l1kfilmr5h64011340050.png
) l3 p# y8 G/ Y! A
* P6 v: o5 J9 M
TableLayout的共有XML属性继承自:Component。1 m# ?+ v# _: r! r
1 r5 y4 ^( H- M
TableLayout的自有XML属性见下表:5 Z, C+ p# _! P) Z5 Q9 j" Q
" Q+ p( d$ l: L* e

7 m  `: {, P( Y0 Q                       
& F2 B' L1 [' w+ z. F) p: b9 e                        属性名称4 a& Y) y4 [4 t8 U
                       
8 R1 O/ R& ^) H/ I2 }( {                       
$ X4 A3 }- b% U. @' Q& o! U                        中文描述7 \7 N9 u1 x5 D4 B% l0 y
                       
5 J% i  x+ ?, C/ }4 f& |# ?                        # x- m0 r: x- r# J) u" }
                        取值" L% _* g( t* c$ H1 ]) H& t
                        7 g% e5 V; L& p  ?$ T9 x
                       
+ n& m( s) J  H, R) P                        取值说明
0 `  k) D' s" ^0 B( ~" n                        4 r3 ^& R! C" i5 b- h. o0 _( J) e+ o
                       
! n" Q% ]1 |8 j2 l: `8 {% g: O1 p# \                        使用案例
; P9 B9 P, M! U0 {9 E6 ^5 y" K, l- [                        ' A$ Y- P2 D2 n# ~: x1 j6 K6 h
                5 h+ Z' q0 r0 q4 c: [7 O3 l# h
        ! P& c% U0 @, K3 r6 o# o+ x- |
          M7 S" C( S) {+ \3 C
               
9 g3 ]. b1 s0 F! {% ~' ^/ l                       
9 |3 I: d2 g* E0 k- b$ d                        alignment_type
0 M; O' h7 A. N( |1 H0 S" T$ ?                        2 `* w% R  F; d' f  V& g7 L
                        $ T4 s+ ]2 ^2 V2 |: U4 D
                        对齐方式/ |8 Q" V" V+ R: ]$ C. P
                       
) a) X2 g7 I* A2 n4 o0 X                        " ^# _$ |  q# D
                        align_edges
3 D2 W& {9 O' p) ^/ T  ?2 ?5 Z                       
$ N5 i. n. N( w4 Z6 ^  _                       
$ Z: Q" w6 e) v7 t                        表示TableLayout内的组件按边界对齐。6 L( Y& G* b- N5 t
                        9 u' ?; _6 R+ \! F! X( Q. T7 E% Q
                        8 i% u$ w' i8 B# k4 h
                        ohos:alignment_type="align_edges"0 i4 l. q9 S! P: l0 a
                       
, |  h( W4 P1 f# I- r               
" f0 Z: |; o) w9 m2 ], B5 Y                * N# i1 M  G) q1 c  R$ x0 P
                        ! \1 j5 X/ C9 B3 z
                        align_contents  w: M8 r+ N7 d3 J& w# ^
                       
0 D1 X7 r1 g  x6 @9 [0 f6 J                        9 ~+ a. U" ~& M/ R' j. J7 C
                        表示TableLayout内的组件按边距对齐。
+ C! r1 o% T! p. B4 N                       
% \/ ~8 r' |; a5 s1 h                       
( K6 w% a! h; [/ r: m                        ohos:alignment_type="align_contents"
5 i2 `2 ?) G. \                        1 O$ N! F4 q: N1 ^) S
               
1 J# f) D8 B5 D7 R9 W# S1 s                5 h8 Q6 b- X+ t( B& t
                        + I9 s# y2 p8 z2 Z. e
                        column_count& ~% K, O& p4 F0 k5 o$ N
                       
7 @$ V$ S+ ?9 j                        ; |% j$ }2 i+ M1 n' o1 `
                        列数3 o3 O" l! C* @2 L& _( F
                        8 z0 J8 i( ^7 v7 u4 f; A( X+ w2 n9 ]
                        9 w4 W* C/ ?: T, L; T# D/ v+ G) r
                        integer类型& p# p% L& T/ k& g1 o
                        & x7 d1 x# l6 t+ z5 U& Z; [
                          c) f4 i5 V; G3 C
                        可以直接设置整型数值,也可以引用integer资源。
! S, G% U& K" e$ s. w                        4 D+ a+ _/ h( }% K3 O
                       
" i. o; I# t" x3 m# ~/ m2 x8 @                        ohos:column_count="3"
: N! X7 g+ X- m* c4 q8 k' {) D2 _" H8 _- U1 [2 `/ J5 t( `
                        ohos:column_count="$integer:count"; R, [; f( g' M  f
                       
: ~$ T& E* p, {, u$ l% D1 g# Z9 s               
) _) f8 ^2 }8 O, I4 X- P               
) J1 E. R, ?; e' Y2 c2 n1 s, V                       
9 M7 `$ o6 N4 a* J5 A/ e# z                        row_count
* p% T3 |# I; c% H. ]- x                        % m8 g1 E$ ?6 X9 m* h4 ^
                        " g/ I6 B7 R5 u- g: t  {
                        行数8 x, N5 [3 K+ k8 E8 H: H/ L' x" @
                       
) H$ \& ]9 ]9 O  M+ n2 i  R1 K                        6 ~8 m+ r6 P5 A3 |
                        integer类型
' F7 _' x- p$ r  P5 a                       
9 [) J# b$ h2 D8 z# b& ?* L                       
$ h  x% O( N* D1 [                        可以直接设置整型数值,也可以引用integer资源。
% u8 a' ^+ E8 b8 k                       
2 @6 [- U" V3 i$ T, z- l: l$ I                        + {5 V& a# l( ~% D$ c8 {$ Y5 t
                        ohos:row_count="2"# T1 ~3 |. v6 \' v5 j) h! z

' a. O) F8 E/ R# ^                        ohos:row_count="$integer:count"
7 I% e) b: o2 V, x; _4 s                        1 N" N! |* N- _. E
                8 |' a7 y" }. a# v
                ; P. |# F& x: P6 o* W/ G2 g
                        * D2 q. Y( ]! V' H
                        orientation
5 _! k0 b4 w# r2 Y                       
% B$ v' l7 M4 m% ^                        ) v' P/ b! T/ }: ~
                        排列方向# ^7 h" T% m! c1 s
                       
7 b2 o1 {9 M9 M& b                        5 B6 n5 t7 Z/ w1 v- o# a3 F
                        horizontal% {5 p) b: x# Z( Q* F) v
                        0 B7 S2 t# i, J) ?0 v# p
                       
  S% a9 j- ?' i4 ?  p. n  p                        表示水平方向布局。
9 J( P+ S; i/ G1 \% A, r# X; d                        ; l2 P# [5 ^3 @
                        * P! I' i( Z% z$ g
                        ohos:orientation="horizontal"
; c$ U# Y- R/ ]6 c) ]9 {8 u                       
; u: t; a6 o7 q               
! O6 B6 q2 z1 e6 o8 q0 l( p                / D* B' G8 O5 n% q3 Y, _
                        7 N; N3 J! |# [% o( v
                        vertical
9 T4 n$ `; Y/ e$ ]                        ' D8 |: d, u/ o. G
                        5 h( O# s! t6 K  i' y/ k9 j7 G
                        表示垂直方向布局。2 h. r# d& O0 k
                        $ |( c/ t6 j. o
                       
8 b) |. |/ U# v/ g. _2 r                        ohos:orientation="vertical"
; @: O0 m. P' f0 E( B, Y/ W* R                        / X& W) h2 g% l+ ?
               
  A/ O8 Z" }3 Y  w4 ~; }在XML中创建TableLayout,示例代码如下:
, Y/ U# t. F8 x
  • [table]/tablelayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_parent"    ohos:width="match_parent"    ohos:background_element="#87CEEB"    ohos:padding="[table]/tablelayout5 g, b3 H4 w% U. p* }6 F) t; |
    在graphic文件夹下创建Text的背景table_text_bg_element.xml,示例代码如下:
    ) }) [6 H! H# y% O2 U; L
  • "http://schemas.huawei.com/res/ohos"ohos:shape="rectangle">    ohos:radius="5vp"/>    ohos:width="1vp"        ohos:color="gray"/>    ohos:color="#00BFFF"/>"http://schemas.huawei.com/res/ohos" 8 R$ m6 o9 e! l  u9 p, P
    在TableLayout布局中添加子组件。
    : N5 u3 H# z) D. M. q5 t# r- U/ K$ I) x3 e( `8 y! R
  • xmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_parent"    ohos:width="match_parent"    ohos:background_element="#87CEEB"    ohos:padding="8vp">    ohos:height="60vp"        ohos:width="60vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="8vp"        ohos:text="1"        ohos:text_alignment="center"        ohos:text_size="20fp"/>2 R  l- O9 V# V1 M! e
        ohos:height="60vp"        ohos:width="60vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="8vp"        ohos:text="2"        ohos:text_alignment="center"        ohos:text_size="20fp"/>7 I9 r4 L6 {( \6 ?0 S: L0 o
        ohos:height="60vp"        ohos:width="60vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="8vp"        ohos:text="3"        ohos:text_alignment="center"        ohos:text_size="20fp"/>
    $ |2 Q( E  x9 l    ohos:height="60vp"        ohos:width="60vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="8vp"        ohos:text="4"        ohos:text_alignment="center"        ohos:text_size="20fp"/>[table]% l! [1 F7 w$ R
    TableLayout默认一列多行。5 Q% _% I$ g; |! U, F/ Y5 J
    & T+ p1 h. \/ Y: H# W

    eduxj5fxpbu64011340150.png

    eduxj5fxpbu64011340150.png
    ( g! H2 |- [/ ^) ~' S  \
    3 u5 J+ J6 K! ?7 G1 S% I
    设置行列数:
    ! `4 B* ^- g% g6 J; W4 e% V; X: |) R" B! y! x
  • ...    ohos:row_count="2"    ohos:column_count="2">
    4 ^$ I) D; M) l: C设置TableLayout的行为2,列为2效果。. F0 @$ W" e$ E1 L- M

    , ~" p2 P3 k) C9 m5 p5 Q8 K

    3rxjgtuwd5v64011340251.png

    3rxjgtuwd5v64011340251.png
    5 u: ?7 z/ q/ D) Z( w, W

    7 g. ~0 O+ M: O) q在XML中设置布局排列方向,以“vertical”为例:/ i9 U# p% ^1 z& _5 z3 e

    ; J; M( S6 q  R/ s/ W
  • ...    ohos:orientation="vertical">    ...- T1 f1 A) k5 Y7 e; y6 U
    设置布局排列方向为“vertical”的效果。$ Y' n( H' ]5 D; r8 y# X9 p
    + `, M! m7 M9 c- b' T- ^

    zoyxhbu4biq64011340351.png

    zoyxhbu4biq64011340351.png

    ( ^5 V; D/ d. N/ ]1 h9 w# o% G; h; |$ a( [; q, k
    TableLayout提供两种对齐方式,边距对齐“align_contents”、边界对齐“align_edges”,默认为边距对齐“align_contents”。代码如下:
    ! k! ]2 g1 y) {0 {# }* w+ R/ _6 @7 J( s4 r8 l
  • xmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_content"    ohos:width="match_content"    ohos:alignment_type="align_contents"    ohos:background_element="$graphic:layout_borderline"    ohos:column_count="3"    ohos:padding="8vp"># ?# P4 I% Q. a
        ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="8vp"        ohos:padding="8vp"        ohos:text="1"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    6 f5 o; u( {4 j6 @4 I+ J, e6 S    ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="16vp"        ohos:padding="8vp"        ohos:text="2"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    # y% X" E* {* T$ ?8 F. e% G    ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="32vp"        ohos:padding="8vp"        ohos:text="3"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    2 [* G3 f2 k+ s$ ]# W, w    ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="32vp"        ohos:padding="8vp"        ohos:text="4"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    5 h: m/ b6 ]. w% d/ h- g& s    ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="16vp"        ohos:padding="8vp"        ohos:text="5"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    . U  i5 o2 |9 j6 o    ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="8vp"        ohos:padding="8vp"        ohos:text="6"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    : z2 O7 |% J5 R# Z& u边距对齐效果:
    8 V5 ]) p5 {8 @: a1 L3 u7 m4 D5 e- w0 [5 i7 Z2 l

    t2qd0goxt4g64011340451.png

    t2qd0goxt4g64011340451.png

    2 g) {& |) T' P6 m* Y/ M- a, T. I5 S4 t* `. T) n8 n
    将TableLayout的对齐方式修改为边界对齐。- L5 K, ?2 n7 a) t- S

    ) u1 C; ]4 |( T2 {1 u& D
  • ...    ohos:alignment_type="align_edges">    ...
    # Z6 {; v( Q' d; K9 D- U边界对齐效果:7 V" d! l* b& o4 l8 _& z

    * B1 q7 O+ a( o5 I* L. y& {! a

    vrxtotgl3eo64011340551.png

    vrxtotgl3eo64011340551.png

    % ^/ y; u* x' A. U1 h& x9 F0 }
    . J. Z/ r$ ]( D! t; Z引用graphic文件夹下的背景资源文件为layout_borderline.xml,示例代码如下:  h4 k  q2 Z/ o7 b% a7 Q
    ; V+ |, q9 I9 f) `% R4 b! }
  • "http://schemas.huawei.com/res/ohos" ohos:shape="rectangle">    ohos:radius="5vp"/>    ohos:width="1vp"        ohos:color="gray"/>6 N4 ~0 ?9 o6 t4 N. ~

    / J5 e0 F7 g- ~( U- F4 ~1 yTableLayout合并单元格的效果可以通过设置子组件的行列属性来实现。' h9 ~& q  W+ t9 f
    - G1 l% G) I5 N7 f* j- z
    设置子组件的行列属性均为2的效果展示:$ b3 a3 |9 e$ K
    ( O3 {  K9 E3 b9 A- c3 r. g. d

    a5q3pavvsv064011340651.png

    a5q3pavvsv064011340651.png

    : z, S8 [  p$ _" Q+ D. }" F. z3 d1 ?
    在XML中创建TableLayout,并添加子组件,代码如下:
    7 A$ d- @: n0 B" t. ]/ P5 G& N2 q& |
  • xmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_content"    ohos:width="match_content"    ohos:alignment_type="align_edges"    ohos:background_element="$graphic:layout_borderline"    ohos:column_count="3"    ohos:padding="8vp"    ohos:row_count="3">+ f! ~; R, D9 E# @9 E
        ohos:id="$+id:text_one"        ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="16vp"        ohos:padding="8vp"        ohos:text="1"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    6 d$ j" O, @+ \    ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="16vp"        ohos:padding="8vp"        ohos:text="2"        ohos:text_alignment="center"        ohos:text_size="14fp"/>' x; m' l# V. _5 r+ F% {
        ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="16vp"        ohos:padding="8vp"        ohos:text="3"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    : V* f& W$ u# S+ r7 }    ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="16vp"        ohos:padding="8vp"        ohos:text="4"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    $ x4 [) i5 F7 V1 \    ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="16vp"        ohos:padding="8vp"        ohos:text="5"        ohos:text_alignment="center"        ohos:text_size="14fp"/>+ h$ n" }; J$ `- J5 Y$ O
        ohos:height="48vp"        ohos:width="48vp"        ohos:background_element="$graphic:table_text_bg_element"        ohos:margin="16vp"        ohos:padding="8vp"        ohos:text="6"        ohos:text_alignment="center"        ohos:text_size="14fp"/>
    / {& ^4 k* ^" i1 w: u' t8 n% I在Java代码中设置子组件的行列属性,代码如下:
    * D( }7 Z3 U2 ]* S* P4 W3 X8 W& p. J
  • @Override    protected void onStart(Intent intent) {        ...        Component component = findComponentById(ResourceTable.Id_text_one);        TableLayout.LayoutConfig tlc = new TableLayout.LayoutConfig(vp2px(72), vp2px(72));        tlc.columnSpec = TableLayout.specification(TableLayout.DEFAULT, 2);        tlc.rowSpec = TableLayout.specification(TableLayout.DEFAULT, 2);        component.setLayoutConfig(tlc);    }! D, f8 L* C6 c" J, q
        private int vp2px(float vp) {        return AttrHelper.vp2px(vp, getContext());    }
    & c* _6 p8 |6 Q: ^0 R0 _在设置子组件的行列属性时,TableLayout剩余的行数和列数必须大于等于该子组件所设置的行数和列数。
    $ ~2 A! D  E, ]$ u
    7 }4 F9 \# B7 V8 G9 s& y目前仅支持Java代码设置TableLayout子组件的行列属性。
    0 i4 @, [# Z; d在创建子组件的行列属性时,还可设置子组件的对齐方式,修改上述Java代码如下:$ a7 D/ r' I+ B. y

    8 u) Q+ }$ e; A" Y7 q0 S
  • @Override    protected void onStart(Intent intent) {        ...        tlc.columnSpec = TableLayout.specification(TableLayout.DEFAULT, 2, TableLayout.Alignment.ALIGNMENT_FILL);        tlc.rowSpec = TableLayout.specification(TableLayout.DEFAULT, 2, TableLayout.Alignment.ALIGNMENT_FILL);        ...    }* I" S- u6 q7 b$ l$ F$ C
    子组件的对齐方式设置为ALIGNMENT_FILL的效果:
    8 L" O: J+ y1 _8 O8 W9 U. J2 O: L. \! R+ ^' T0 ]

    mmpjmxeuxsd64011340751.png

    mmpjmxeuxsd64011340751.png
    1 B4 t0 ?) g! ~
    8 ^8 C4 V5 Q* B" g
    设置子组件的权重,代码如下:
    ( |' Y7 H1 l; I7 O# ?- ?+ o# h* P) j8 ?5 G- s0 T
  • @Override    protected void onStart(Intent intent) {        ...        TableLayout.LayoutConfig tlc = new TableLayout.LayoutConfig(0, vp2px(48));        tlc.columnSpec = TableLayout.specification(TableLayout.DEFAULT, 1, 1.0f);        tlc.rowSpec = TableLayout.specification(TableLayout.DEFAULT, 1);4 C1 {- |  j1 p
            findComponentById(ResourceTable.Id_text_one).setLayoutConfig(tlc);        findComponentById(ResourceTable.Id_text_two).setLayoutConfig(tlc);        findComponentById(ResourceTable.Id_text_three).setLayoutConfig(tlc);        findComponentById(ResourceTable.Id_text_four).setLayoutConfig(tlc);        findComponentById(ResourceTable.Id_text_five).setLayoutConfig(tlc);        findComponentById(ResourceTable.Id_text_six).setLayoutConfig(tlc);    }
    ; }7 T8 K7 m, ^' x+ E上述代码将子组件的宽度权重设置为1.0,每行子组件会均分TableLayout的宽度,所以需要设置TableLayout为固定宽度或match_parent。- r4 A9 |9 ~  f

    ; q0 [7 p& R8 R( d
  • ohos:width="match_parent"    ...>" M  x1 C4 j. c' Y  o% k' Q
        ohos:id="$+id:text_one"        .../>
    5 n. y3 U8 V% G# J$ c2 v    ohos:id="$+id:text_two"        .../>
    . w5 q' y  ~) [, {    ohos:id="$+id:text_three"        .../>
    ' U; T# \2 ?% [& ?( |5 l7 C; {    ohos:id="$+id:text_four"        .../>7 S$ ]2 {" R' z8 F, J, c/ w
        ohos:id="$+id:text_five"        .../>
    & J' P9 g6 Z6 C. d* W    ohos:id="$+id:text_six"        .../>[table]" ?  O- w9 n( r& Y8 H$ G% J4 {
    将子组件的宽度权重设置为1.0的效果展示:
    ( M* W8 L6 I0 N3 t% w; B, z, E! t, T' K, A9 e

    oq0ww54svhl64011340851.png

    oq0ww54svhl64011340851.png
    4 U' u3 d* \" R* T" S9 W, x1 B

    ; o( I. D/ o0 ~9 f
    ; T: m0 @$ B, L: U5 t' \

    tut2ac4yb1164011340951.png

    tut2ac4yb1164011340951.png
    - `8 z; g/ j# x% r( T' K' F( P
    往期推荐基于Mobile SDK V5版固件开发大疆无人机手机端遥控器(5)
    8 Z5 ]* k, _! w( J" ~2 s一种高速ADC和DAC转换电路分享
      h% C+ D. k1 e8 g! K一文搞懂CAN和CAN FD总线协议6 S3 M7 `  R! g) |) d( w
    LabVIEW和Arduino的巧妙结合(基础篇—1)
    ; r7 T& J1 g% t0 y  D) ULabVIEW设计自定义滚动条
    ; }+ V3 f7 M/ ]$ z: q+ N# l( W% k; q5 ^
    # T" D: M6 S& u

    bahiptkecvz64011341051.jpg

    bahiptkecvz64011341051.jpg
    1 S4 ?4 J# i, [1 ^. `& s

    9 ?2 _( r/ H9 ?4 g* A+ V  `/ t; y

    bby0wizcklx64011341151.gif

    bby0wizcklx64011341151.gif

    & R. U5 k; ]$ x. I) I" h+ P点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表