电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

854

主题

854

帖子

8396

积分

高级会员

Rank: 5Rank: 5

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

upjsyjqyfke64023064555.gif

upjsyjqyfke64023064555.gif
# v; T# w. L& f1 T+ a1 n
点击上方蓝色字体,关注我们
$ d! j; Y1 p* b8 D9 x# B" JTablelayout使用表格的方式划分子组件。
) [" n/ H& h! S# ]2 ?- ~, I$ w8 ^) [. z6 H2 d  J1 e3 H8 u/ _

y4srucwgcty64023064655.png

y4srucwgcty64023064655.png
7 I+ a, B# x" u2 X) o- f5 s7 K

. O% v5 V+ Q- y' S8 [1 pTableLayout的共有XML属性继承自:Component。# v9 p5 i6 p8 X' p  b

( _# P% V7 Z  F' x) \/ _TableLayout的自有XML属性见下表:" H9 ~( z; y3 `' a, M* i# E

+ z( X: h/ U' @! D9 o4 D
' m% P4 O# X0 p- t' e( }& m5 P; p                       
/ {: o6 a4 e# W1 P: c                        属性名称
* }% y4 ]2 u, J# F5 [( h8 O9 A/ q                        6 e# X, O+ t3 a
                        ) Q' E2 p, ^7 A) Z- H, s
                        中文描述# F( }2 ?% K; Z+ P, ?+ ]
                        9 z: I$ f& \+ g& Y
                        : j1 D; e! H% y5 _) g
                        取值
4 s* q6 X7 k4 `7 |' q                       
3 z; D. D' U/ c4 y7 [                       
; Y# y( r0 N6 H  T: m+ F* w                        取值说明
% O% U6 U+ O" A, k, x4 p                        , k2 z! u+ v% C9 g4 i5 A
                       
! t- {# k" u' w5 Z/ r9 [! \                        使用案例
$ r2 E5 t; B* d; z% G) ]                       
& \, _, k4 i- k  m                5 k! \- p. I3 H$ f3 N
        ' ?1 C* A2 r/ H5 H  J) G) J
        * p9 @  l* u; B( p
                ) R' u" I! o) z
                       
# I! j- \" T# c( M9 R+ r                        alignment_type
6 ]- `+ V  V- T. b# J1 w  H) l( T                       
) U+ H+ `, m, g  e1 r                        3 p2 h0 @+ u8 ]
                        对齐方式6 j1 {& A, H6 w  o
                        ! [" ~) T$ T: a5 b4 c
                        4 B% M0 q; j; y
                        align_edges: |  N9 o, G$ u. g0 x) E8 K0 |
                        9 W: x! }" y$ F( X2 h0 j
                        ( ~' v. o+ |, X: j% a
                        表示TableLayout内的组件按边界对齐。
9 t5 E3 r2 _, Q. c3 q% z; k6 W                        / U7 b, L+ @9 u
                       
% c: l! y0 ?6 e2 X" S7 Y6 _                        ohos:alignment_type="align_edges"
  B8 r0 T$ H& D( G( ?( ^                          }1 p, W! P4 R3 T! Z( `8 S
                ) O8 S# P" x' P: Z! ]+ ^; u
                & c4 {* L( h5 q. ?# v$ d7 @6 K
                       
7 X) a  x& T6 `7 d3 K: e! h                        align_contents$ Y; E6 k5 E2 S5 h3 q) ]4 _
                       
1 z. T. w5 b4 J: v/ T- U                        % n" |( V: u2 D3 j2 W3 R
                        表示TableLayout内的组件按边距对齐。6 d: |0 C$ u, G  k2 }5 ^
                       
! b1 C: J% j" L                       
4 F$ m& |, E7 ?0 W$ `                        ohos:alignment_type="align_contents"
& X1 Q' P' a- ?& h$ |0 W1 k2 s                        , Z- }  I5 g8 D
               
: l' E3 o$ a1 v7 {! \                % a( X  S- g. Y' {; T
                        / i) s, D* d* J
                        column_count
9 t" x5 ]1 S" w% \- J, J; Y                       
3 S( s2 z+ s( S  z; s  Z& b                          t& |# E6 g5 e" u1 j/ {- Y  Q
                        列数
& P! n( C! J  p+ @  k8 x                       
( T! ?2 V- y7 D9 N' \                       
' m  T( E9 G' C                        integer类型7 a1 v* p/ T/ z# |, C8 T% I
                        $ |3 U. V1 B) l- O
                        $ k& v# B% _* b# _
                        可以直接设置整型数值,也可以引用integer资源。
9 g  K5 Z/ z/ X) ?- p$ N                        6 g3 K/ ]! ]+ X# m( K8 B) {. k% a
                        ! J) R: c8 J7 |, h* x. Q( O
                        ohos:column_count="3"3 Q. B3 \& ^& x) _/ V, d/ i5 c& Q
# m/ e! q1 N& N0 ]% J" P
                        ohos:column_count="$integer:count", [5 h; `  W7 \  d9 W. j/ D  J
                       
( D. w- h$ E' t& M4 u& ^+ C               
( h2 o% H5 `: }% W3 v7 ]- n" U                % ~. K6 f# r" t! M' E
                        , i( `* z% w6 y+ g2 y" N/ x
                        row_count3 M  y$ R' F) A
                        . J8 P1 [- h. Q2 |, R1 ~
                       
: w- X# t  D" w; |6 J5 D                        行数9 t/ \3 G, M" ]. a7 k# ?6 V) f
                       
) Z# M& ?$ g( @" d1 q                        # L5 C$ G5 Y- ~( V0 u( S) c
                        integer类型
/ j$ s% O# ]+ v" n                        1 p; h( @; O) q! K4 r3 s, i
                       
# U( d- a# K8 c8 N                        可以直接设置整型数值,也可以引用integer资源。
4 J9 o- _' W" k( t                       
+ h- |1 D7 b; ~- C- [2 G                        9 n1 v% x; S# t, U  i3 x8 |
                        ohos:row_count="2"
; g- ^+ w2 v7 E3 U' g( |, N& M
8 J4 d8 S' t- H: \                        ohos:row_count="$integer:count"7 ^! s6 `; O' l( N8 r# Z
                       
3 u. d' o5 J" ]; I* I               
/ b1 I# f* J3 K' W  Y" Q. f$ k                , Q+ C( {5 e7 m2 d4 n
                        # V' D( A6 W7 J( b1 s* W) y; T5 Q5 j
                        orientation& g9 R" t% M$ p2 |) A6 @/ k
                        ) m0 j) W/ F% H/ [4 T
                       
3 g6 [* M  y: g( M                        排列方向
+ R' V8 S5 T1 [& x                        - y/ C9 w3 z& Q" e0 I
                        6 Y$ }0 T  k4 \0 o
                        horizontal) T8 L8 g8 [: J4 Z
                        6 w9 S  j9 M+ r+ l/ c5 q% m
                        8 {9 H- R1 f3 z* G
                        表示水平方向布局。
2 z) j  U3 S6 @, p$ w                       
* s2 p! q5 Z+ y1 ]0 y- G6 t- A                        1 C0 C' X6 n$ j# P+ m5 p) k
                        ohos:orientation="horizontal"
6 D# O9 d- T$ C- A8 _7 K  b                       
  D5 E+ |$ ]* i( t# T               
6 I! l6 E9 f. ~' P+ {               
& [0 Q" N( z$ E; g                        $ X# |+ z' p2 |4 i
                        vertical$ {' E  @$ o) w) E/ T( X- O
                       
3 u+ c( ]  y9 g+ d                       
& |4 Z; G0 ]6 }( v* h                        表示垂直方向布局。. X/ v. J8 X4 z+ k7 h7 S, s
                       
( M  r0 Q) w, R$ m$ U                       
3 S! S7 N$ ~% X  e0 e                        ohos:orientation="vertical"
3 K; c) p; |/ r- n; M: I$ {- O  x                       
4 w+ d, r/ R# W# X2 o                : P- P% j, H& w
在XML中创建TableLayout,示例代码如下:
1 g7 K: ]0 b2 q! W
  • [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
    & p2 e) T9 v' u在graphic文件夹下创建Text的背景table_text_bg_element.xml,示例代码如下:- F. @. F; b# g' w2 ~
  • "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" + f; ^, z8 r0 w# n
    在TableLayout布局中添加子组件。  j3 H$ }1 d% l. I

    , n# i( ]1 q+ @: ~: K0 ?
  • 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+ Z9 g* \( o2 K2 [, x    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"/>
    0 I7 y5 k5 {" h/ |* ]    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"/>
    & O+ V9 a% U, o% D8 Q    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]+ h/ n9 k& B' G7 m( N- Q7 f0 o
    TableLayout默认一列多行。
    & W# J; r0 U) a4 u- J/ b7 f8 P9 `+ M* n) m/ t, q1 p9 m1 n% c8 A

    t3xn1evcjlq64023064755.png

    t3xn1evcjlq64023064755.png
    3 g- m5 q$ ^7 Q4 B& @3 k

    7 R0 I. e. I# R  \' W- ?设置行列数:
    . j/ X( ]" j% S2 E- c7 j
    ! `0 {4 z9 p: J- S
  • ...    ohos:row_count="2"    ohos:column_count="2">
    + @- a9 H/ v2 C+ V7 i3 Q5 s$ l设置TableLayout的行为2,列为2效果。
    # C9 r  v8 @3 l8 o( N" v, D' W, ~4 C3 Z" ~( C4 W- G4 z

    0x1vb03eukh64023064855.png

    0x1vb03eukh64023064855.png
    3 I1 |; ]# W: _- c6 r# s- @# g
    & e! ^! S5 h5 J
    在XML中设置布局排列方向,以“vertical”为例:
    ( F% ^, g7 ?/ s4 l; M. W3 \" M" A9 R/ @! X# P
  • ...    ohos:orientation="vertical">    ...) Z& I/ Z# u/ L$ P: U5 F# [; s. M
    设置布局排列方向为“vertical”的效果。
      h7 Q- r" X6 Z8 ^6 _! A
    ; f5 S! ~, U& G& h

    unz3dzuc5xl64023064956.png

    unz3dzuc5xl64023064956.png

    + I* k9 J7 ^8 R9 Y% [
    : s9 w) a3 R) k8 i! K# fTableLayout提供两种对齐方式,边距对齐“align_contents”、边界对齐“align_edges”,默认为边距对齐“align_contents”。代码如下:( @- I7 o8 B; r3 u
    2 ~* |5 I# N* t3 u
  • 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 @: c7 z( j2 j    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"/>
    % b5 h5 B1 k, |/ {, [$ z3 t. i    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"/>& F& o$ ?# p; j: 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"/>* ~6 ?0 O* @  u8 G* Y
        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"/>
    " g  O- a6 X' P$ L3 l1 f- x    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"/>8 h* b7 [( C/ ~8 U/ k
        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"/>1 P* t5 n% ^7 \. g8 u* P
    边距对齐效果:
    % F4 g! }  ^( ^7 [2 }) |( H1 ^7 |
    9 x! e4 X4 Q; D7 C; `

    oyxyntwu5gz64023065056.png

    oyxyntwu5gz64023065056.png

    1 K2 T: n5 a; b- W) Q3 p* A& O/ v5 g( b- W
    将TableLayout的对齐方式修改为边界对齐。% u, D/ c2 b. h& @( Q2 o: }- ~

    : s+ q% }7 q6 d+ N1 O7 \
  • ...    ohos:alignment_type="align_edges">    ...* d& X  ^& C* R% G+ s% P- A
    边界对齐效果:
    # L5 ]) y- O! w" b) r) g
    ' _/ G0 o. q1 `- G

    ij5c3kwpbia64023065156.png

    ij5c3kwpbia64023065156.png
    , @( }: Y, r% q/ v' \- X& e
    4 E+ Y( }) v: e. x
    引用graphic文件夹下的背景资源文件为layout_borderline.xml,示例代码如下:
    ) P. S" J0 b' P! b: C3 M
    . s+ r8 x5 S5 a, X4 a1 T
  • "http://schemas.huawei.com/res/ohos" ohos:shape="rectangle">    ohos:radius="5vp"/>    ohos:width="1vp"        ohos:color="gray"/>
    ( l( w* [4 m$ b+ L
    " g4 k) Y$ u6 F6 n3 E) m7 Y" M& ZTableLayout合并单元格的效果可以通过设置子组件的行列属性来实现。
    1 d8 @; \' V2 l7 r* a$ q, `; [
    7 x) L/ A1 o' _$ n3 z设置子组件的行列属性均为2的效果展示:
    ; p1 a% W4 U) @  G
    5 B7 X) `! P9 w! r

    yefghctpkvy64023065256.png

    yefghctpkvy64023065256.png

    4 a* q7 I/ i' F% f7 j
    # Z- R4 Q4 L* @0 E0 }在XML中创建TableLayout,并添加子组件,代码如下:
    0 Q0 H9 j5 K5 v) ?6 c
    * J5 R! S: H0 }, I, s$ \# s- }
  • 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">
    / d5 H6 R9 \/ q4 h8 R1 g0 S' 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"/>0 X( {3 M% w8 y2 X/ u: A% e/ S# r
        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"/>
    0 p. O' l! n9 I6 j/ K; n    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"/>
      K( I- ~% g: h    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"/>
    & \4 i, S' @0 y0 g6 j: X4 w& b    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"/>4 c' y' x4 O# ]4 O5 ?( ]9 G+ h, ?
        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"/>  Y9 t( Z( ^3 _+ t# L3 y" \$ x
    在Java代码中设置子组件的行列属性,代码如下:
    ( }( o4 T2 ~: A
    1 e( B+ ^5 k7 T. |9 a  [% c4 ]
  • @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);    }: S0 _; @; _. T4 E1 o! ^$ M
        private int vp2px(float vp) {        return AttrHelper.vp2px(vp, getContext());    }
      B- d: N& s! e' w在设置子组件的行列属性时,TableLayout剩余的行数和列数必须大于等于该子组件所设置的行数和列数。- \+ w' @6 q) I) @5 E

    ; t( n- u  @, E# r# s3 a  K目前仅支持Java代码设置TableLayout子组件的行列属性。# a/ R  {! V5 g/ d+ ]
    在创建子组件的行列属性时,还可设置子组件的对齐方式,修改上述Java代码如下:2 I/ t& Y, w( q5 a+ U& M& Q

    8 ?5 U& g  D4 k5 a' w/ X) b
  • @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);        ...    }3 C# r$ P3 ~3 Z4 o+ V# ]
    子组件的对齐方式设置为ALIGNMENT_FILL的效果:
    9 t" j1 }0 X: Q7 g1 Q
    ( a2 j5 A+ ]: i0 W- K" R, ]

    34h3fyeecrb64023065356.png

    34h3fyeecrb64023065356.png

    $ ]8 T3 n% n" t  |% L5 c* B5 w6 \0 v" ^% w! v1 W: |4 h* G  D, ~
    设置子组件的权重,代码如下:
    3 C$ m0 s# t8 d4 Z5 o/ [
    / ?) B# i3 ^3 k5 z$ 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);7 o' e  n4 P1 \/ p, r+ U3 `
            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);    }
    ( y' H; A1 ?6 M0 N' v上述代码将子组件的宽度权重设置为1.0,每行子组件会均分TableLayout的宽度,所以需要设置TableLayout为固定宽度或match_parent。5 e2 n) @) D7 Q4 d* ~
    " h3 z1 A: |; d8 d& u
  • ohos:width="match_parent"    ...>- d; q- x6 D" V! c4 a% y, @  j- q
        ohos:id="$+id:text_one"        .../>
    " Q7 X+ o" h0 ^    ohos:id="$+id:text_two"        .../>( U  Y& Z* [/ s% U
        ohos:id="$+id:text_three"        .../>
    ! K& s3 }6 M8 ^) k1 J! i* y6 R    ohos:id="$+id:text_four"        .../>, p& Z1 i8 y2 p2 p: P# F
        ohos:id="$+id:text_five"        .../>$ n$ T5 [0 T5 w7 V6 r: C+ j
        ohos:id="$+id:text_six"        .../>[table]
    2 A! i5 j3 C$ G( \/ I将子组件的宽度权重设置为1.0的效果展示:: c0 c) o' l5 Y/ o( s1 e$ c
    , ~" o9 q' }  O' o  j+ p' A

    ijxnpfrv23564023065456.png

    ijxnpfrv23564023065456.png

    / _" T; \' x5 X' F1 C4 m
    ( A7 E4 D/ N% V9 R% g7 B- n; J3 C

    c0n5zn40ptr64023065556.png

    c0n5zn40ptr64023065556.png
    ! t" S( `9 V- V6 R! o3 s7 V
    往期推荐基于Mobile SDK V5版固件开发大疆无人机手机端遥控器(5)8 e9 b2 c$ q& P  D5 @
    一种高速ADC和DAC转换电路分享
    - r: m" l' ], u# r! V一文搞懂CAN和CAN FD总线协议
    * S# q# r' r" a" jLabVIEW和Arduino的巧妙结合(基础篇—1)3 @7 F: ^0 [! U& F
    LabVIEW设计自定义滚动条& w5 E3 a' L: @/ P% I8 }

    $ P4 v6 Z: j+ `* c' A+ |. t- t

    wmjjolurf2k64023065656.jpg

    wmjjolurf2k64023065656.jpg
    " K% e# c( Z0 G6 J

    , f0 i! `2 A+ v5 v0 ^

    zg0xz1hpd4064023065756.gif

    zg0xz1hpd4064023065756.gif
    5 I8 u- S* a9 e; q& o% l. _4 n0 y
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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