电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

397

主题

397

帖子

2457

积分

三级会员

Rank: 3Rank: 3

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

g43nwgt22hl640333607.gif

g43nwgt22hl640333607.gif
" h7 q8 v9 h# U, O' f* V
点击上方蓝色字体,关注我们
& Z, f: j$ E5 e3 d( z8 N( xTablelayout使用表格的方式划分子组件。
# i# b2 h7 X2 Q( |7 H
) ~) \: i+ i! Q2 k. Z/ i! C+ Z

a1c1ksif1ps640333707.png

a1c1ksif1ps640333707.png

; N2 v) n1 k' ]7 b$ Z$ p5 Q9 U+ Z, z: f4 S
TableLayout的共有XML属性继承自:Component。
  j% T$ t3 @! d% O% ^" N# O, E# X5 V, P4 y% ^0 ?6 U3 x# _
TableLayout的自有XML属性见下表:
2 j# s7 r0 L& R: ?$ Z" ?1 |
# L- X; V' t9 I* Z
% q4 o  s/ H% X* p                        " `4 r5 ~* K' Y
                        属性名称
+ }& [4 z# {) _6 ]$ O: H                       
" a+ r5 U6 k# e1 ]- r0 i0 K1 T                       
4 A. F0 q  ^( v4 A                        中文描述
1 k- D: m# [) X( ?* g8 J. O& V                       
$ O3 ]' P0 q3 K5 Q1 c                        ; Q: Y' r1 ~$ T
                        取值
. A# I9 |# f/ j5 o                       
6 |! v. K6 j% R+ p                       
$ f! J7 i/ h1 |& w5 r+ y                        取值说明) ?- V- `! s* v9 n6 I& Q: j
                       
- b0 t+ h2 Y* u& _( u/ J                        " ]& `3 c; m, V3 ]
                        使用案例
) S* e. Y6 ~1 Y                        / F# a3 b' K5 w" p5 x
               
; j* }& L$ y2 Q& n. ~7 S9 D# J' _1 U        # M1 `; X+ C4 F3 M$ ?# I
       
+ p2 c  k/ \$ `- {1 O               
5 l3 u0 X2 ], b9 f                        ! x' _/ M" A* \0 o9 Q
                        alignment_type  p' w( o) o! N* y( p
                       
8 R9 o; \9 b' R, f1 P- Y0 |                        % `! R2 c* D7 g$ o
                        对齐方式5 L. x& I9 H8 E: i
                        * G- S+ H# n' f9 i
                       
- M5 |0 I' y3 ?1 P# O                        align_edges
0 \% F; U$ C! D- h6 O                        / y: ]8 S* M1 V! v. \. k6 Q
                       
" u/ F" P# I: e7 c. M7 k                        表示TableLayout内的组件按边界对齐。
9 T4 x7 q: }  d7 c, t( f: R/ L$ H                        0 ]. c  g, q9 o& O
                       
' s+ [5 n* L' j' p7 w; d6 ?                        ohos:alignment_type="align_edges"7 P) f9 {' K. a# {- ?, I7 {4 Y
                       
* y. ~! T/ c2 n( O                , m- N7 D9 l6 x# i- {
               
! L: R2 d' X, H1 K6 R) y! e% P                       
! [& z# z) s6 p+ h6 @. B                        align_contents
* B2 g2 K+ A# H: ~. k+ \                       
- P+ p: a8 |$ }6 x4 F6 W2 q                        " ]* E3 G9 L$ R) w7 o" I
                        表示TableLayout内的组件按边距对齐。
# Q# N$ Y/ [$ T6 ^1 |/ U( E0 F7 t3 \                       
, g- ?7 Y8 W- |9 h# K                        ; s0 }+ J( i7 U0 d
                        ohos:alignment_type="align_contents") R. A1 H% B' g2 D, V8 W
                       
& q, O  q  `4 n  o               
: N6 R6 h& M$ Y5 o5 R* W* K( w                : d$ U/ I8 Y( x  U% C( C4 G- ?: j
                       
9 }4 y' u' o, w( |& r                        column_count) R# Y$ S( o2 g% |
                        - b/ S# r0 `& y4 M) ~! o" A8 k4 Q
                        ) M; b7 e0 Y+ A, G& D
                        列数1 K& ]. g0 T6 G3 p8 X- \
                        5 O/ k) q* K5 \! a
                        , X1 [0 r: O( Y5 c. u5 Z2 Y7 h/ h
                        integer类型
9 u& Y, ]5 h' y$ x3 n0 }6 Q7 m3 v                        4 l/ O9 l. l! S/ \$ P% \2 q/ ~1 S, o
                       
3 D, {" `, D; m4 D, J  ^; U                        可以直接设置整型数值,也可以引用integer资源。8 V4 A& d5 i& f
                       
8 _+ }% f! V2 A                       
* U! N% S1 {: @. ~0 B2 @                        ohos:column_count="3"2 O2 n! ~' f! j# D* U" K6 I7 C% o& `

$ F6 `( o+ {  T5 T% Q                        ohos:column_count="$integer:count"; ]* j: B1 P: e+ d& S6 D  F$ ~7 [
                       
# ]; l) x2 x2 f! V+ {: R                ; ^# b& o$ d/ v: }9 ~. E
                . W: j) N3 A, B2 Z4 Z" ^& ?% `
                       
3 w5 b5 Z. ?/ D  x2 j; F                        row_count) Z! _7 T" h6 F4 G; j$ j
                       
( N! m1 P6 h" l8 [8 Q$ P                        - z& D6 {% i5 o. X4 M+ G. n
                        行数8 j$ M& n. V) ?* _
                       
+ k+ K7 Y6 f3 g7 i) N8 S$ f                        ' n% A4 L1 m1 ~0 @" P
                        integer类型) V$ _5 o) J, Y. P
                       
6 B$ j9 B% J2 o7 ]' a4 q- k                       
8 G  f& |1 i4 R$ u                        可以直接设置整型数值,也可以引用integer资源。
' |* E. {9 F& t1 E) c6 \                       
( N5 j/ J. w& W2 I2 a5 W                        , ]0 @5 u) h2 p9 l
                        ohos:row_count="2"
( i5 x: Y9 W0 m. ^  c+ `) d$ v1 X# I6 A* [4 S
                        ohos:row_count="$integer:count"" o( `. R# Z3 f7 O# [0 H
                        7 _' `  D6 |7 G) a
               
% v0 i& K& a0 J               
! q1 g* G! G' m! f" L9 }% w. b. M* M                       
5 p# Y$ S) ?& Y4 s3 M0 }& F  M                        orientation
) v# x5 [, ]) R/ F2 E5 ]6 \% s                        $ x* \0 z* r; p$ e* F3 w1 Z: t
                        8 b  G( j: L( v/ X# |! N- g
                        排列方向* Z0 y# k5 q7 P  {2 ?7 w
                       
" \( M* ^* ~+ ?: G: G                       
7 s% B; l; w5 x                        horizontal! n% w1 V5 n4 n: _1 V4 n8 [3 X  G* }
                        7 s# {8 T% @% g8 s
                       
- w7 t, G: c9 G                        表示水平方向布局。
8 B3 w+ W- ?0 v8 x                       
0 J: O# F6 W5 ^8 w' m                       
" U8 d- ^; `# D. n" Q; I6 ]/ R                        ohos:orientation="horizontal"
7 E3 m+ e. @" _8 k2 j5 c                       
: i1 w/ I/ Z, T! [) ]- R               
3 H2 r  r$ h" Q7 I" N                ( F, A# Z# D0 ]( d' F$ j
                       
$ K% Z6 f/ S: u9 _; B8 U, ~% S                        vertical0 x0 y6 K( B8 U& T9 M
                       
0 ?5 o' j( t3 A  k. P9 f                       
( |- v' ~  v7 z4 C                        表示垂直方向布局。9 s2 q8 h! M6 s/ e: U
                        % ]! W8 R6 H* M' a" C1 [7 N  _  ?! P2 V
                        9 N' S0 G: t' {2 S
                        ohos:orientation="vertical"9 Q) ]3 V1 `5 O* P3 C( B7 t8 f
                          p1 O7 t2 `9 P. a5 a2 K
               
2 K2 F8 T" a9 l9 e! u- g在XML中创建TableLayout,示例代码如下:
" R" t6 u; E3 b% ~8 C
  • [table]/tablelayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_parent"    ohos:width="match_parent"    ohos:background_element="#87CEEB"    ohos:padding="[table]/tablelayout
    & _5 d# x* d6 Y在graphic文件夹下创建Text的背景table_text_bg_element.xml,示例代码如下:! E5 t9 H) o' m  o5 U( r) Q1 I
  • "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"
    ' G% e  h( O& g: ?8 X在TableLayout布局中添加子组件。
    : t6 a+ u) Z9 M6 g: z. i# {) |6 q+ N$ T6 _1 n: K
  • 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"/>
    ' q, P' u+ U6 ~! T' g/ H* r' ^    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"/>
    5 _% z# Q9 B  R' T7 O& H$ `3 S, E    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"/>8 G) h% b& q8 n$ c7 j! U
        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]; F& M  {, ?+ C( w9 r
    TableLayout默认一列多行。
    ! k6 h1 P/ K' [: b9 o& p: L" f( Y; X& W6 w8 R. K, w

    4a4qj3ke5nw640333807.png

    4a4qj3ke5nw640333807.png

    ; P' ~7 G" J+ x' B7 q( W  D6 }: T6 t( D
    设置行列数:) i% s! l" O) e6 T! _
    9 x7 l: K2 g. K
  • ...    ohos:row_count="2"    ohos:column_count="2">
    , }# N( @# k9 Q设置TableLayout的行为2,列为2效果。
    / V' W9 L+ B3 m* x2 V, e2 V* ]( M' K- `

    sb22d1xcsdf640333907.png

    sb22d1xcsdf640333907.png

    , n5 h% h/ M& F$ ?  _
    / W7 N( t5 P" |  u8 J在XML中设置布局排列方向,以“vertical”为例:1 a5 S- i# l' n* H( B6 `) Z
    ) |& }! K! N! D. Z  B6 W
  • ...    ohos:orientation="vertical">    ..., U$ u! Z: S; X$ K7 f
    设置布局排列方向为“vertical”的效果。
    . [2 N/ v- u5 B4 Q$ h
    & l: [+ A9 z" |7 T

    fq3thgdkk42640334008.png

    fq3thgdkk42640334008.png

    + Z( ^! F0 I4 c& e9 Y  A, O  u8 U. T( ~; \/ ?! t/ G
    TableLayout提供两种对齐方式,边距对齐“align_contents”、边界对齐“align_edges”,默认为边距对齐“align_contents”。代码如下:1 U0 t5 K' y! s' \) X& ]" z3 T# g5 T

    : y' i2 Z, w( J
  • 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">3 g6 c1 B' m; i8 d/ G: ~" E
        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"/>
    + e/ u8 Q% X( A1 B    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) {: y4 p, c    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"/>7 Z, F4 B* z! `+ Y( ]/ ^& o, W! u
        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"/>! k2 a, W; ]$ i+ B7 Z8 G+ B9 y
        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"/>. C" M! ^0 e! A# s: H2 _
        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"/>
    . Z, z$ B. \8 a# S  W9 h6 u边距对齐效果:
    + f7 w" |) j* B3 r( W% @5 b
    % e! [5 L: d3 q/ C9 D

    ujxbcprrdy2640334108.png

    ujxbcprrdy2640334108.png
    ( X7 I4 r) |6 Y- j: j

    $ Q* B# V& I7 w4 s* \将TableLayout的对齐方式修改为边界对齐。/ C9 K3 V. F: d
    8 P# I0 z( c0 M( g# a- f: B
  • ...    ohos:alignment_type="align_edges">    ...  R9 ^8 C3 E/ }6 J4 P/ Y7 j# N/ {
    边界对齐效果:
    ; }$ f' R3 \. `; D! X0 B. c3 _
    % B' u# Y+ d3 [" z! G: j2 O

    foypwvjds3n640334208.png

    foypwvjds3n640334208.png
    . _% F0 r1 @2 h0 r9 Y
    # Q' l8 k( i  S5 P& _4 s+ ~
    引用graphic文件夹下的背景资源文件为layout_borderline.xml,示例代码如下:
    . U: u# \# V( M0 t% K
    1 ?9 t. j5 ^; f. ~; ?0 _, ^: s
  • "http://schemas.huawei.com/res/ohos" ohos:shape="rectangle">    ohos:radius="5vp"/>    ohos:width="1vp"        ohos:color="gray"/>; ]. w" e2 L& o. `& v; m
    . O; b, F6 \8 q
    TableLayout合并单元格的效果可以通过设置子组件的行列属性来实现。. _1 B5 K8 O2 h8 O  u0 [# y1 w/ N5 O% p
    % U1 t/ h, ]9 X) a
    设置子组件的行列属性均为2的效果展示:
    9 W$ I7 y# A$ O) i- ^; i( _; z* x
    4 E8 o8 f2 c+ U4 m* p) m

    logii0loco3640334308.png

    logii0loco3640334308.png

    6 N  {2 Y5 A1 N& E
    & r  V" O+ W* T在XML中创建TableLayout,并添加子组件,代码如下:
    : B* z8 D& z6 i$ K
    % f8 ^! {1 X5 e8 l1 [2 l1 y
  • 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">
    , X  \# L2 R; ^( j0 K    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"/>
    1 O& a' u$ w5 M$ ~' T% y. X    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"/>
    ! Q  p0 D1 m- Q: B# J0 O$ W    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"/>
    & o2 S5 \+ g9 r" }' I/ N    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"/>& [) ]. Q) @. U( T4 V7 `- 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"/>+ r, ]1 j7 O9 U( y8 d: d" A
        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"/>% G/ t2 F0 N: J, L. N" a& q7 D9 H
    在Java代码中设置子组件的行列属性,代码如下:
    % j! U9 c1 R# E! U  l- \' j0 ]9 f; u: t! M- D% U
  • @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);    }
    . H1 A  P' k" n- u5 ?2 }3 I    private int vp2px(float vp) {        return AttrHelper.vp2px(vp, getContext());    }" G9 u: d4 L' [" z3 G* Y3 n
    在设置子组件的行列属性时,TableLayout剩余的行数和列数必须大于等于该子组件所设置的行数和列数。
    # M) P  G/ y3 h! y7 c0 D0 x
    ) ~1 l! Q+ ]* U3 n目前仅支持Java代码设置TableLayout子组件的行列属性。
    7 s3 Z7 D3 p0 w5 [. ~8 Q! |0 c: O在创建子组件的行列属性时,还可设置子组件的对齐方式,修改上述Java代码如下:4 T( L4 f- J- P# ]  N1 Y
    - @! r: {# Q- P7 ~
  • @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);        ...    }1 l3 t; A. v; [+ V% Y' \) R# M2 f( Y
    子组件的对齐方式设置为ALIGNMENT_FILL的效果:6 ~' W  I- R- s. s6 {: C
    & O! e' J3 }- w( t0 n3 T

    cqb4qzs3oym640334408.png

    cqb4qzs3oym640334408.png
    % N. h) {4 |- x% I; y8 c

    5 d+ m" F! ?1 \' h设置子组件的权重,代码如下:
    5 O. o2 C4 _- c/ K7 s, M  B0 `3 h, y6 i3 X& M" X: p
  • @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);
    + C0 X# X3 V4 w! R% V* k        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);    }% t' z1 `3 k9 o
    上述代码将子组件的宽度权重设置为1.0,每行子组件会均分TableLayout的宽度,所以需要设置TableLayout为固定宽度或match_parent。3 @1 b3 ], z6 M, g2 P( e

    # x! N2 k' Y( ~! z0 j- {
  • ohos:width="match_parent"    ...>+ C, j( C6 w3 E7 ~
        ohos:id="$+id:text_one"        .../>1 h2 P! \% E: Q, F
        ohos:id="$+id:text_two"        .../>
    , n7 O& c4 v7 ^& C! ~: K    ohos:id="$+id:text_three"        .../>$ }% T* d1 ^( x8 _5 O/ ~
        ohos:id="$+id:text_four"        .../>4 V5 i9 p  w3 t: S
        ohos:id="$+id:text_five"        .../>
    % `1 [* e/ l% k' y9 l& Q    ohos:id="$+id:text_six"        .../>[table]
    & G! o0 \) n$ J5 S7 w% Y7 r将子组件的宽度权重设置为1.0的效果展示:1 p3 z* Y8 g! {% ]! o

    * W$ c' e( w! s, @4 g$ r

    3mekn32jzvb640334508.png

    3mekn32jzvb640334508.png
    6 _+ d: r. ?# o5 O4 T7 X, {2 s1 e

      D; d5 T5 \/ A* H' F, l9 Z
    9 f4 r+ F# \3 R( {7 M0 j. }+ S

    ogbaqisis1f640334608.png

    ogbaqisis1f640334608.png

    3 `1 Z4 L: b7 a% w往期推荐基于Mobile SDK V5版固件开发大疆无人机手机端遥控器(5)
    & }2 l: o8 c# R# G& w, i3 n一种高速ADC和DAC转换电路分享
    + e. ~, B  W% a; N# K7 L/ k一文搞懂CAN和CAN FD总线协议3 _& F) E. U2 j% |4 C" o6 [
    LabVIEW和Arduino的巧妙结合(基础篇—1)
    1 h$ u3 y3 {% K: ZLabVIEW设计自定义滚动条
    - P7 t3 ]1 Y) m% b) O& b0 f

    - a. B3 G0 N: w5 x/ f

    51ql0fnlvwc640334708.jpg

    51ql0fnlvwc640334708.jpg
    " @# U! s4 o3 R9 i  V; @: V0 i) B4 k

    ( U7 J1 `' a* l; d& }$ M3 W

    oq1sin3a4bp640334808.gif

    oq1sin3a4bp640334808.gif
    ( e) ]3 D9 o& i  o
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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