电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

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

skmz1uctqen64025000303.gif

skmz1uctqen64025000303.gif

# O' _# _  O4 h" R+ r点击上方蓝色字体,关注我们, T9 T$ k( x, i, H1 Q; l9 W1 e0 o1 d
Tablelayout使用表格的方式划分子组件。! Z& Y3 R  Y* x4 b$ l9 l! v. m( g. s
- u8 Z* {( I6 j- Z

lw4olwwjoak64025000403.png

lw4olwwjoak64025000403.png
/ T* u9 M& A- R; \: y+ o/ m& M

) X) _  l: X; t8 k* TTableLayout的共有XML属性继承自:Component。; v7 K/ h8 v/ p

0 p$ ~8 }  z# b) wTableLayout的自有XML属性见下表:
" ~  \. p6 U6 L! [- I, n2 f3 q9 S
/ @% t; g; d' h! s+ A# Z+ p8 z) f: K
                       
! w( f: Z. i6 D                        属性名称
4 ]) W6 @- j  j  c  X, I                        2 a3 @2 x8 A& z% i. L( ]& H$ @* N9 |
                        ! G- Z2 Q* e2 S4 ~6 D7 R4 p$ z
                        中文描述
& I2 ?' X  _* n                       
: N3 [( c/ C7 G0 e; g" I' w, y* u                        / P, r4 S6 O* [# _
                        取值
% w; X( c  `. F0 c                       
7 ?0 k5 @/ W6 c0 r2 `                       
/ T5 E9 M+ C3 i8 M: ^                        取值说明5 U. k$ X0 K$ f" c! t, [- @
                       
! G! u' P# A1 R5 {; q                        ! R8 B" ?) x6 j
                        使用案例& s0 U: k0 j# @+ `0 ?4 g/ s, ?
                       
  n6 x+ B$ x8 Y: P, B               
2 z& W# l& M* l! a       
; P4 p( a8 t! |& [& l0 B       
0 l4 T) e3 j: A( x6 I5 v; L1 Z) X                ! O, u; j; Y9 P
                        ) P4 x4 B3 u5 u' o
                        alignment_type
4 u- m( r3 p' G% F  f                       
- {" @# @# Z" o) d% C+ N8 A* ?  W4 U                        9 a! ~, S5 x+ Y: S- f
                        对齐方式
( L; V$ P+ S9 F                       
% {- H1 A' N4 e& Z: w$ h4 i                       
9 T8 a& }! X3 p* n' ~! `' u7 Z                        align_edges
) t& y; w$ ]/ n7 e                       
  I, ]+ R1 e4 l+ A, V                       
0 C6 G7 @+ }% w5 W: A                        表示TableLayout内的组件按边界对齐。3 A+ }: N' j+ ~! o
                        + k2 _4 [1 K/ @
                       
  G. @* m0 q, [% [- ]                        ohos:alignment_type="align_edges"4 Q5 l& r5 {, `/ t' e
                          X) z# R) G# ?, O7 ]
                + M# r$ z- H, _
               
- W) Y! w: q/ G- B& [" U3 b) M$ O                        ) f0 c$ Y+ d! N' \$ K
                        align_contents
4 I8 B0 N" D4 D                       
$ E9 D$ x. X: W' L. m                       
( C: j! L: ^9 S- I% T4 F                        表示TableLayout内的组件按边距对齐。/ y! U2 r- U  j( |$ L
                        " }: v- O* j) `( I- B, t+ C
                        # y/ W$ E4 h. c' J/ q; O. a3 K( F
                        ohos:alignment_type="align_contents"( M# Q( B2 M& R9 z# S
                       
* @) z5 v" X3 l5 J  A- A) r               
* B* c) C5 w0 }                % a1 w: D6 E! u# T$ j, k& B& C( M
                       
9 }. A8 A/ P" f/ E! ]                        column_count) G0 h2 E1 m! E# u
                       
' h" S6 t1 K3 u& E0 G( y                       
9 z$ X. K6 ^5 N2 O: P. {                        列数1 ?3 P& m& f( M
                       
) j: A! H$ I  H" A                       
% D5 V8 @. g& }" T) r- p                        integer类型
) G) L+ @# E0 F& K, a* b6 l                       
3 t& r" m/ U: O' @0 C                       
2 ?# B6 N/ \% p9 y# e1 b' e# B                        可以直接设置整型数值,也可以引用integer资源。
2 ^  J4 m2 H$ C, V, N                       
" x0 _" n0 k5 e" o% H                        5 h4 {( k* Z) S+ W
                        ohos:column_count="3"$ t" V+ |* `" A4 F, w

- m& x$ m# z' F6 x                        ohos:column_count="$integer:count"
) d) h# {+ t. K. i7 n( o+ ]2 ^                       
/ c4 |  C' X& j  P               
- S3 ?. I5 ^  P' O9 k* x2 g  S                $ |' t0 x1 n% h4 z( K$ |
                        3 ^1 k% n7 H& v% n$ n+ g2 w
                        row_count
9 @& u) w* i/ V. A                        ; U+ ~+ Y8 @8 {5 D9 {# S
                       
. R) f; y' o  {0 u6 H# R+ R                        行数
. N( C4 N+ |* G  k# _; z. m) t                       
$ I2 i: }4 }5 J1 {: X- D* ^                        5 E. u/ D/ `# g  }4 @& m/ l4 G
                        integer类型
+ L6 R6 Q* A5 E                       
* S; D# W7 n( f& _% i: M$ i2 r: @                        , E$ f8 D4 J+ W7 w9 n. j7 f9 z
                        可以直接设置整型数值,也可以引用integer资源。0 _% ^6 R4 M. B0 w$ f  L
                       
) f5 @; M' S; b* O: Y1 w& r5 T5 V                       
* B; Y/ ~3 Y. P- [                        ohos:row_count="2"# _( Z, L% U/ X3 T3 U  a

" x- Y6 \9 w( n5 I                        ohos:row_count="$integer:count"
, @: v1 S7 b' G" I                        # `! N( P: k9 {% G3 K! {7 p
                # o" ?. v$ D+ s* F# ^, q! n
                ( F: N6 x$ K. H/ B8 [& a6 O
                       
2 ~$ }8 B* ]! S. F8 ^9 e                        orientation1 o5 k3 U8 C* Q+ D! q; w) D- `: B4 \
                       
0 y# I$ B+ P1 B) \6 T                        " P4 v3 }& {. ?: w7 \9 I
                        排列方向( K/ q% M$ I+ E0 ~/ d' Q
                       
4 d' I) }2 R6 J5 A8 p% p                        # V7 s) ^* |1 c( z
                        horizontal
6 _- r. x" }" V# ]) }$ J, b                        0 f, |  G; S+ }  W& x) T8 X. v
                       
! i) X0 u- A  ]" p                        表示水平方向布局。- }  H7 N" ^5 F6 r
                       
; h( }7 u7 N, J; n1 ?2 a3 `+ t                       
9 G' C( l3 ~+ S8 c7 d6 y# y0 l                        ohos:orientation="horizontal"
* ^% r0 |1 u5 o7 x                       
2 ]: p2 T- V8 B, Q, Z; U. v( b, _8 W               
* \' C8 V( N$ v1 E2 b7 j                , d3 T' j; _3 g1 x% b9 C
                        # ]8 ]) k! G( N  R9 D: ^9 J
                        vertical
( Y4 c1 G1 b3 c; e                        : W' q3 r, g% J: {! p
                       
& u+ A& _2 A& v9 L; V                        表示垂直方向布局。% K5 A& L. k" ]" S7 ]
                       
, @% s6 p3 y+ E: X                       
0 ^) L0 \/ S; M" v6 K! R4 [                        ohos:orientation="vertical"
  D4 ?! C" b; W6 V! }                       
$ X7 n5 e# O! ?# ^4 R. S               
! M! w1 K; ~3 C* D: p在XML中创建TableLayout,示例代码如下:
5 ]6 h9 `  N& g8 p  L& H
  • [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
    ' Z# k5 x6 n3 Q6 _3 x" f在graphic文件夹下创建Text的背景table_text_bg_element.xml,示例代码如下:
    6 }6 k- a5 q/ ]$ F1 C. f
  • "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"
    5 A$ V- Y; O$ z9 @- l: v在TableLayout布局中添加子组件。
    & ], z7 t3 L, b* k
    ( U6 m, ]7 i5 b# o% t0 i% o
  • 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"/>
    ) `, _4 u- k. W8 P9 u$ B    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"/>' N+ b3 _' A+ |" `; B4 q2 J
        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"/>
    . ^1 K; s4 a( ?" }3 |* q. a1 _    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]5 q1 @- z: x6 Z/ ?
    TableLayout默认一列多行。( l; t$ q+ t7 F" ^: E% W) o- x4 y

    6 q* s0 V, r- i2 o& |

    ojwlcaeg4mz64025000504.png

    ojwlcaeg4mz64025000504.png

    1 x  b" {/ L; L0 I5 v0 L5 _7 j; \: y4 s, U" F2 @) l" A
    设置行列数:
    6 M  U3 Q' P* i5 o
    + V1 N% x6 M+ h+ @2 W- \5 \
  • ...    ohos:row_count="2"    ohos:column_count="2"># w# ^, k9 G2 R7 `9 l
    设置TableLayout的行为2,列为2效果。6 X/ w5 w; ?  q2 Y8 B, I5 P

    0 C' Z1 P; r( P5 y

    llaihpgwn2r64025000604.png

    llaihpgwn2r64025000604.png

    5 O0 g9 U1 D% Y1 Z" A
    3 m$ k& _+ ^& U% d# `, E# ^' q在XML中设置布局排列方向,以“vertical”为例:
    % W2 ?9 e: O6 Y- y- R- }, t
    & A# c5 e9 c2 z2 |" K7 S
  • ...    ohos:orientation="vertical">    ...- c# x! c1 f* Z( L" j
    设置布局排列方向为“vertical”的效果。
    5 D( W- h. e. j5 l& D) {' W" [  A1 }8 y

    0an5vavm0fe64025000704.png

    0an5vavm0fe64025000704.png

    & t' e5 d  D' y. X
    * b7 f' [+ c9 r% p/ g% @TableLayout提供两种对齐方式,边距对齐“align_contents”、边界对齐“align_edges”,默认为边距对齐“align_contents”。代码如下:6 E- r( x: q; |+ g% A  `! V

    2 e4 Y- y2 ?$ q; x& ~2 T
  • 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">
    7 _, d6 m9 @% B5 ~    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"/>) v+ Q2 B. Q# Q1 ~  |8 ~
        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"/>
    ) O( Z. Y' j$ R8 o: L2 A    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"/>& E  N8 G  j7 J- K
        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"/>
    $ `  S; r% D9 h. A4 `- s. j    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"/>
    3 D3 N9 \% J$ f' f! g8 @2 V    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"/>
    ( x* L6 L+ @. B边距对齐效果:3 l7 J0 m# k6 P( g* B9 G( L8 y# g, M
    ) z4 W/ d2 H2 p% A

    ltnrknoefcs64025000804.png

    ltnrknoefcs64025000804.png
    & k3 r' C" X" \* M
    7 |$ g' v' N/ j7 _( T2 a
    将TableLayout的对齐方式修改为边界对齐。
      e( \1 j6 b+ Y; s; U3 d0 r- }) h1 {1 Y( b/ {0 f* y( ^' i' [  V3 w
  • ...    ohos:alignment_type="align_edges">    ...# H9 e/ Y: h) S/ W4 `: Y: U* B
    边界对齐效果:
    : f7 H6 c3 Z# |# s0 z, I2 E1 Y6 e! s6 z

    qwph0k3hehq64025000904.png

    qwph0k3hehq64025000904.png
    . c% d; H+ |! H4 F5 T+ F& G

    ; C; s1 w4 b0 \: v. l/ [引用graphic文件夹下的背景资源文件为layout_borderline.xml,示例代码如下:
    6 H, K7 z  k- u/ ~
    ! ]- \: N: a1 M2 r+ H# m
  • "http://schemas.huawei.com/res/ohos" ohos:shape="rectangle">    ohos:radius="5vp"/>    ohos:width="1vp"        ohos:color="gray"/>
    9 d: S) W; k9 _' a; ]& l1 y% U; m6 c7 Q
    TableLayout合并单元格的效果可以通过设置子组件的行列属性来实现。6 q1 l2 y# c5 q& c, e

    3 Y  a: [9 d9 k设置子组件的行列属性均为2的效果展示:# {" i% \! N# R8 v
    8 [# h8 S0 t" k) F+ ~: p5 [

    5m2qjqxfasu64025001004.png

    5m2qjqxfasu64025001004.png

    : Y' v" W3 Q; @' ^$ q6 i
    ' c( {+ m: q: D! f6 t& J5 t在XML中创建TableLayout,并添加子组件,代码如下:( N, ?" r- Y  L" Z% W: r

    % _6 q: x! S8 z7 g- D# A
  • 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">
    ; P- i( T7 `  B3 b1 X1 u    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"/>0 I) L7 y+ V. ^# N1 {8 O  o6 ?
        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"/>
    4 o3 M6 h3 v& N1 b    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"/>% V4 j! k, o/ x# M. U: a
        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"/>
    0 F9 l! i. V, y& q6 }& p, h: W4 H    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"/>' A9 I. }: b2 Q& m4 |! X6 U
        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"/>+ }1 j& S+ M8 R9 B5 U' @3 n0 z/ @3 U
    在Java代码中设置子组件的行列属性,代码如下:" B5 x0 E2 u+ _7 f) S, _
    7 ?- Y5 \5 Z2 ^7 `+ `! S" e8 y
  • @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);    }
    ( J2 t; z4 L; _3 p) J    private int vp2px(float vp) {        return AttrHelper.vp2px(vp, getContext());    }
    ' |; V; E* D( J* @: m: W" j在设置子组件的行列属性时,TableLayout剩余的行数和列数必须大于等于该子组件所设置的行数和列数。: {! V% O) i, v3 D! Q9 A9 O

    , e+ j. z4 O; ]  f$ X' F目前仅支持Java代码设置TableLayout子组件的行列属性。4 g% o% h" k" r; w
    在创建子组件的行列属性时,还可设置子组件的对齐方式,修改上述Java代码如下:3 J0 A2 P( O! g8 a' l' |
    + j' d+ D% G9 T* _
  • @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);        ...    }
    / K# w. |' |: w. P+ _9 a$ E/ w子组件的对齐方式设置为ALIGNMENT_FILL的效果:
    6 M( t7 G2 p- u0 q5 [8 y+ M& e6 ~
    & ^+ m% l- A0 a9 I

    1ai1kpjr4jz64025001104.png

    1ai1kpjr4jz64025001104.png
    ! q. t; J- Z1 Z% I
    $ @( x  Y5 h0 ?( ^% Y3 [) O
    设置子组件的权重,代码如下:! Q% a& y* `1 y2 |4 O% T& U
    ! j- C6 Q% B& N; F! [. S
  • @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);$ @/ a( ?3 C7 d2 B; R) H1 f9 {
            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);    }
    0 S$ z1 Y$ z( `. h3 a上述代码将子组件的宽度权重设置为1.0,每行子组件会均分TableLayout的宽度,所以需要设置TableLayout为固定宽度或match_parent。
    * G. v) v2 y5 Q7 b+ ?7 ]9 M8 D7 R* }# }- n2 n
  • ohos:width="match_parent"    ...>; u, j; V$ U' A, v! f$ Z
        ohos:id="$+id:text_one"        .../>
    * {. k/ j; g6 p5 G: D    ohos:id="$+id:text_two"        .../>
    3 \3 y$ w4 m0 V    ohos:id="$+id:text_three"        .../># a2 c2 g7 H# r# W6 b. h
        ohos:id="$+id:text_four"        .../>
    / z% f5 u  Q  p; P. J  d# y. ]    ohos:id="$+id:text_five"        .../>
    / i" {" v2 f0 d/ o6 g$ |    ohos:id="$+id:text_six"        .../>[table]
    % E4 B  i3 E0 W' r将子组件的宽度权重设置为1.0的效果展示:2 ~- u7 h  S# H' I( z& W
    " B9 s& q( k1 w' u- ?3 r/ K" N

    0ilu22b4vq364025001205.png

    0ilu22b4vq364025001205.png
      |, w9 l; y  U: j3 b

    # p) H- ~: W, s/ \; o( N
    7 o$ Z  Y5 e$ N4 y0 e

    fasoyu4yzjq64025001305.png

    fasoyu4yzjq64025001305.png
    3 Q. t, r, R, h1 ^/ \
    往期推荐基于Mobile SDK V5版固件开发大疆无人机手机端遥控器(5)
    9 Q' b0 ~  d, m& K一种高速ADC和DAC转换电路分享. z* d) O& a( s8 `0 L/ C9 r7 z  ~
    一文搞懂CAN和CAN FD总线协议- u+ s1 ~2 W( o. o' a
    LabVIEW和Arduino的巧妙结合(基础篇—1)- o: C" P5 W. g( L+ N) b
    LabVIEW设计自定义滚动条
    % J9 C7 U( ]8 x9 `6 C
    * i9 o6 L+ p( Y; h; V! [

    t5moebzfrj164025001405.jpg

    t5moebzfrj164025001405.jpg
    9 `& {4 P% J' s: c
    1 A: r, h. ~. p# t" B- E5 n! ^; C! c

    iqwediukx3264025001505.gif

    iqwediukx3264025001505.gif
    - s% ~, Z" e+ A& x' v; B
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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