電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 56|回復(fù): 0
收起左側(cè)

HarmonyOS學(xué)習(xí)路之開(kāi)發(fā)篇—Java UI框架(Table Layout)

[復(fù)制鏈接]

660

主題

660

帖子

4567

積分

四級(jí)會(huì)員

Rank: 4

積分
4567
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2023-8-9 12:00:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

3 m0 J' K3 i2 J: Z' J點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
- N0 Q4 l+ v4 w3 u+ {/ iTablelayout使用表格的方式劃分子組件。( C/ ]5 J: }6 t# |6 {6 I) E4 ]0 C  p

4 e& A" x# G  m/ F4 S
8 u' {0 G; m/ n! Q7 r6 q: P6 A# J: F  G8 x7 ]* f( B/ O  n
TableLayout的共有XML屬性繼承自:Component。( e+ V2 R, Z4 G
8 p+ d2 A6 \$ a! Y; F; f1 ^$ r* k  Y
TableLayout的自有XML屬性見(jiàn)下表:
2 P1 h* e" y+ ^' B( H- M
0 l1 i# w) M, ?! G9 _$ j; X( K  @# c: E$ Q: X) @7 }% Z5 k# }/ W
                        ; n* O& C8 [# }6 a
                        屬性名稱
' P* A! p) s0 y" Y7 f, g5 b0 D6 b                       
  h* J8 b% `, _3 d                        7 j  m8 B2 Z/ U4 ^
                        中文描述5 w$ l' j1 B6 J: ~, u% c" |* ^' I
                       
, T# Q7 _2 F: i* ~                        3 R5 v# C& T! K+ R
                        取值9 R& Y$ |1 E& M) F; H
                        8 {' |! i! r- j' [
                        - A/ r* F/ U- r
                        取值說(shuō)明
, M, R; o' Y* T$ F' G9 \                        ! K, a/ Z! L# t9 J2 r' r
                        6 ]* ~" X7 B# f9 [" B$ V' [
                        使用案例
# G4 q- x1 u7 S* S5 o                       
6 s, i! d4 N1 q0 e0 U  F               
* h# m: A, h6 g  j; D        2 c: c; |. Y8 y2 z9 n
        + ?3 T, |4 F0 R% p1 U. N; M8 E
                : v7 e5 o+ O8 v! e8 q
                        ! f: r0 w" Q: |9 Y( z1 h) C( l8 U$ S
                        alignment_type
! v% \0 D, d# N) Q3 T                        2 H& O. C4 z& t. ]/ }) I  }: H# r
                          X0 i$ k1 k, _0 p6 O( X
                        對(duì)齊方式$ y. H' F/ F1 N% R
                        3 K, J  t8 ]9 g6 D, w
                        3 q! b& Q  P# x. ^  Z3 ]0 a' X* k( Q! Z
                        align_edges
4 u# q( _& C& v$ }% i- X; a                          [; @7 o/ k. ^' j$ H/ X( a, V" K1 i& U
                        & _9 a1 @) ?1 V* v( S- ~/ y% F
                        表示TableLayout內(nèi)的組件按邊界對(duì)齊。$ B7 D. j; l0 S3 S2 U
                       
2 g# {, J. |( y% O9 U6 ]* D" \$ I0 p                       
- M6 D% H9 L' l$ C" O; }                        ohos:alignment_type="align_edges"$ |* n% q$ j4 X
                       
1 j/ D2 L1 U7 D0 \. q               
# V" l+ ?8 o/ {  d                5 V+ B' C: Q0 z3 N
                        " {8 \3 I* o- a7 }- M
                        align_contents- e" r* U9 }3 w7 ^) K' `
                        . A& p' Z$ E2 U' o4 T) ~
                        % U2 D$ i" |) H% O5 K. k' i; g
                        表示TableLayout內(nèi)的組件按邊距對(duì)齊。
- ~$ r8 B& P8 J6 ?- Y: u                        0 w! j" D% K# d: ]; R
                       
% W1 |/ \( k: U( x$ S                        ohos:alignment_type="align_contents"! ]  [+ g# I) e' e2 s
                        ) d% f* p: s- L3 J6 W. _2 \) i
                ( Q# r! R. N2 C; E% A
                ' b: B; E8 l( A+ s9 f" |4 {( \$ Q* c
                        0 ]& P  a* ?( ~; T. [6 N: e
                        column_count
: q1 P8 ~  p# x9 z+ z9 d* L                        , s3 u; s1 ?8 G/ N' r0 ?' ~
                        : J$ o4 e" t( R0 j
                        列數(shù)( Q5 o# b- a$ C' E
                        0 B+ w/ z& P) r2 x* W
                       
3 E/ a# Z7 C' A  t$ f+ Y                        integer類型1 d' V$ V: k. t: `8 @2 K6 b2 C
                        " J# b8 U2 x% @1 p$ q9 z" S
                        . u6 |! R; G) u3 A  g) O
                        可以直接設(shè)置整型數(shù)值,也可以引用integer資源。$ j5 g8 x9 b% C
                       
, f4 M' y1 X- n                        3 `, \, v' D7 _' a/ K
                        ohos:column_count="3"7 q7 E2 u- I' y' q' d& P/ s& L
2 p# ?$ ]2 l, Q' h; s
                        ohos:column_count="$integer:count"6 O4 n6 _8 f% l3 f
                        9 N& {4 J  F( n! u0 F: ~
                - [6 w0 S0 ]$ s6 v7 m" c$ Y& l
               
& E2 M3 g- {  p* j                        / u" x& |* Z1 a  B6 [
                        row_count
3 ]& S4 H" C# ?7 B' O                       
* c# n) v' d8 X                        1 j) I" q; c1 }  ?8 C# I0 F
                        行數(shù)% }$ O8 h' b. z9 A% q+ U0 S$ g3 v( t
                        ! s$ e% }* `" C+ M' m8 o7 H
                       
  X" ^5 S7 b* P# v                        integer類型
. W( S# ?* l( ^+ a6 I4 E$ c                          L' K  s/ Z7 c: h
                       
  l) `3 B$ J& P7 q9 k' ?4 `# N                        可以直接設(shè)置整型數(shù)值,也可以引用integer資源。
* l6 j* |" D- I                       
' \. }/ \& e& }* P9 O" A                       
& [- m6 {) B7 D' l; f/ r                        ohos:row_count="2"
) `/ V4 y4 d0 e9 R5 g) T% J. q, W! d% d  p  {; E: U5 E
                        ohos:row_count="$integer:count"
7 e" T& ]$ f2 E                       
. d" _( v2 {9 h. |) j  t               
4 i1 N1 y- z3 `% k7 }" ~                , W0 E1 h" |4 p9 O1 l: g
                        $ i5 M7 H6 K( }, R/ V$ k: k
                        orientation
6 O) C' M; u, f! l. w6 f2 ~                       
3 e1 Q  J5 C6 \; m  h. G                       
8 ~$ Y' B% h. R3 ~3 |( o- g                        排列方向/ z. I, O" v" m* ~* K
                       
# A* p% \+ H9 ~" U9 ]                        5 A8 y" f! o. J+ t. i# i9 U
                        horizontal" ]0 R+ V3 q" n/ \0 h' e4 |9 j
                          `- Z; o6 o0 g4 Z: {, f0 G9 ~
                        ) K$ ]4 f9 Q0 U. e
                        表示水平方向布局。
! N1 H8 T9 Y* p# Z  `3 l) F                       
3 ~, a  T% o" V% W$ g+ F& A                       
- C0 u3 X0 T! P) `                        ohos:orientation="horizontal"
7 L* S: H- D( G7 K- C) m                        7 c; y/ q/ C" l
                2 X% J; V# @* Y% I
                6 I6 X: g; r  K3 @7 q% P* j* ?3 v% O4 \
                       
9 m' E0 K2 B  i5 h' @9 p4 l" L- M# f                        vertical7 C+ W5 I  i9 T9 v; `
                       
" O- A* E: ^* }7 x" \3 A2 h  v+ x                        $ Y7 L7 j9 d8 `" _
                        表示垂直方向布局。0 Q' v" U9 {# w1 m
                        / k) j5 H- Y8 [
                        % J1 L- V4 s' X; v
                        ohos:orientation="vertical"
3 L2 ~3 s3 Z5 E: d                        : c; Z  B2 ~5 w- p, o3 q
                . W  c) I* v8 N
在XML中創(chuàng)建TableLayout,示例代碼如下:
, h* i+ }* e( `- _  I7 T. P' 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]/tablelayout
    : X7 U5 c& W( m- k( U在graphic文件夾下創(chuàng)建Text的背景table_text_bg_element.xml,示例代碼如下:" p8 f( K7 U' U) f8 Q" B: i- P1 ~% A
  • "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" + _; I$ v! ^. l1 `5 d* C4 V
    在TableLayout布局中添加子組件。) [3 p7 H* c9 F( D4 s

    0 d: I$ R: D. E* d
  • 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"/>
    , b) [* O. h, y    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 F; m" Y0 N( t$ b/ g; Y0 i. d
        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"/>
    . ^7 X- g" n9 `* i8 Q% t    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]
    ; e5 f  V, A: l9 O0 k6 ZTableLayout默認(rèn)一列多行。
    1 ^/ P. }2 ?( d3 ]0 t! ], x( f* }# r/ |
    * G) i/ K# m  Q4 E$ A% l6 g( W& n
    5 `7 U  m% x( x3 F' E, T
    設(shè)置行列數(shù):  x8 S. U# V! [

      a  T9 S% l; `7 K, a1 f
  • ...    ohos:row_count="2"    ohos:column_count="2">2 V5 S9 M- i2 N/ k" p
    設(shè)置TableLayout的行為2,列為2效果。) `* K1 Z! o: _: M% u

    4 X1 d3 g' N# y " A# J. |0 f# ~* z
    2 ]& h# c! f6 Q* R: S& b; V
    在XML中設(shè)置布局排列方向,以“vertical”為例:
    ' h) M7 m% e  D: L
    9 t* F& k7 k8 ~4 a+ v# B
  • ...    ohos:orientation="vertical">    ...; L3 H- a# C' X
    設(shè)置布局排列方向?yàn)椤皏ertical”的效果。
    / g5 L8 i3 A0 |# ^1 i% x8 o, B+ a  q
    , X# _1 k' Y* [1 W, K/ u
    . `4 M; U  O, e; G" K3 ^
    TableLayout提供兩種對(duì)齊方式,邊距對(duì)齊“align_contents”、邊界對(duì)齊“align_edges”,默認(rèn)為邊距對(duì)齊“align_contents”。代碼如下:
    ' q8 z: u, J- t$ l3 V. {+ u: l* a$ R$ M5 a, W1 o
  • 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">
    2 O% @! f3 M2 s5 S# Q- [7 I! m    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"/>
    9 @7 ?% l* \- q9 X+ D- h3 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"/>
      e' n/ w% ?3 A4 H; g; P: Y    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"/>5 P7 }+ E) Y& a" b( x+ @
        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"/>
    & \9 b. n; l! z& v  |3 b7 d% l2 G    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"/>
    0 M* A; @  g: W8 K! J' d    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"/>
    ( S: H& b" @- J0 v) p3 H% @邊距對(duì)齊效果:$ E- t9 o( y# m8 N' f8 `
    " O" A( H6 w" I) p5 f- Q

    2 N% Z1 b# f5 @( w8 ^6 M$ T" ?/ x# {8 [* f. D
    將TableLayout的對(duì)齊方式修改為邊界對(duì)齊。
    % S- e+ F* ^) U+ q+ `6 U0 r3 g7 @" q) Z! i  N8 c/ G
  • ...    ohos:alignment_type="align_edges">    ...
    9 q  \  m9 o! r. r" u, E邊界對(duì)齊效果:
    ) k' I: w! U, E# }. `
    2 v2 U' y6 v1 r  [/ b2 a
    9 J$ D, f, \; x( v# U+ t
    - B; K# b' k, P( B, b2 @: q引用graphic文件夾下的背景資源文件為layout_borderline.xml,示例代碼如下:9 v4 b/ b- P  B+ d
    3 |' t( d4 s2 o1 Z
  • "http://schemas.huawei.com/res/ohos" ohos:shape="rectangle">    ohos:radius="5vp"/>    ohos:width="1vp"        ohos:color="gray"/>
    + p: a! O5 H- z, \5 e2 w3 t. H- ]4 v: f) s
    TableLayout合并單元格的效果可以通過(guò)設(shè)置子組件的行列屬性來(lái)實(shí)現(xiàn)。* z. ?. I) b5 p0 l
    4 [: S6 m6 Q$ r0 c* \
    設(shè)置子組件的行列屬性均為2的效果展示:; x" U5 E7 [; }# j) j
    9 j8 a# O/ r/ {; z# _# P" L
    3 w- O' n2 u. v/ {- s! q+ Y9 B

      @6 N) t& V  @) n+ F5 _在XML中創(chuàng)建TableLayout,并添加子組件,代碼如下:, P* f9 A- ^  F* I  V6 D* ]+ G

    * ]  j. `9 f* g  K2 o) H( `
  • 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">
    , h; a$ J+ k9 H# W1 Z    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"/>
    * r  ]! p2 v: o2 w0 H% L    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"/>
    % r) k! r* _/ n& D  J+ J, _% C    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& Q: I" Y8 E; f
        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"/>
    " ?3 O& P) ^& ~. A2 i& g    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"/>
    ) K4 ?; ~0 v# d: r' w  ?1 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 t9 Z! Z9 l  Y
    在Java代碼中設(shè)置子組件的行列屬性,代碼如下:+ Q7 m$ T3 C- w+ n/ h  J
    & a" d7 k# K2 T5 Z* [2 ^
  • @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);    }8 x8 t- U- O3 t0 ~  @
        private int vp2px(float vp) {        return AttrHelper.vp2px(vp, getContext());    }
    / i0 W! Q: C$ h. R# C/ E在設(shè)置子組件的行列屬性時(shí),TableLayout剩余的行數(shù)和列數(shù)必須大于等于該子組件所設(shè)置的行數(shù)和列數(shù)。1 l' [( d% u5 r# z$ D$ b) Q

    # i# R0 ^4 U1 J/ m; L/ e; [目前僅支持Java代碼設(shè)置TableLayout子組件的行列屬性。% x0 _  r. }& a  w& a  H
    在創(chuàng)建子組件的行列屬性時(shí),還可設(shè)置子組件的對(duì)齊方式,修改上述Java代碼如下:
    ; p9 X% d" z0 w
    4 z6 R. m8 W+ K0 i" O4 @' l9 @
  • @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);        ...    }
    + s8 m! c# h/ ~, s; N子組件的對(duì)齊方式設(shè)置為ALIGNMENT_FILL的效果:9 A" U9 L( R2 S3 V) M- }( p

    & w8 _4 y- U' H3 v. K9 _/ ~) { 5 K8 E+ U( v4 t) e* c, S# h  {, O

    6 Y, d  M, b3 \設(shè)置子組件的權(quán)重,代碼如下:
    ! b' y3 B- @5 h- M
    4 `6 F  T+ \6 C- F9 a# t- r% B. x
  • @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);
    " h; m2 @+ w+ ]! Q2 r/ E; Q0 t        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 i2 x# J  I, T/ s! f5 M8 Z4 y& }2 z
    上述代碼將子組件的寬度權(quán)重設(shè)置為1.0,每行子組件會(huì)均分TableLayout的寬度,所以需要設(shè)置TableLayout為固定寬度或match_parent。
    8 |6 u9 }0 u( Q$ S( u
    ! y5 P" T4 p% I) {
  • ohos:width="match_parent"    ...>
    3 i; b7 M5 l+ k0 F, N5 d  i' ^7 |, P    ohos:id="$+id:text_one"        .../>
    6 P5 _7 n% V3 E, b3 B3 y: b    ohos:id="$+id:text_two"        .../>
    & B8 n! r4 G! H: o( n7 `    ohos:id="$+id:text_three"        .../>% l! F9 F- Z* M1 ?
        ohos:id="$+id:text_four"        .../>
    , Q8 `# r4 }) X! m    ohos:id="$+id:text_five"        .../>
    % h6 a# _# h1 |) r+ m. x    ohos:id="$+id:text_six"        .../>[table]
    / e: Y! \- S5 n, K; i6 S' a: \將子組件的寬度權(quán)重設(shè)置為1.0的效果展示:% e- o5 o# ]- a' l

    7 T3 K9 y" F- U/ ~ * ]' @: C/ o$ l. t" B

    5 C" u' j4 W4 q
    7 o2 B1 r+ P, \# y4 [
    ( o" A5 ?% Y0 W往期推薦基于Mobile SDK V5版固件開(kāi)發(fā)大疆無(wú)人機(jī)手機(jī)端遙控器(5)
    $ C! y) E! p9 K# y' O2 g$ y一種高速ADC和DAC轉(zhuǎn)換電路分享
    % J+ U' p2 }$ D" N& Y5 @; W  R# y3 N一文搞懂CAN和CAN FD總線協(xié)議
    - y5 `  W) Y. ^LabVIEW和Arduino的巧妙結(jié)合(基礎(chǔ)篇—1)
    ) C! E. g/ v" H: p; u: O, x: xLabVIEW設(shè)計(jì)自定義滾動(dòng)條5 c, t4 f  ]' w
    - F- W4 X1 e" n+ F# R3 q* ?; m

    5 c8 u; G  s; J3 p) H3 b
    ! K8 e1 T7 \% s0 F" c: ~- L& ^' E * T/ I: W6 y6 Q7 @
    點(diǎn)擊閱讀原文,更精彩~
  • 發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表