电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

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

nnap5d14ss364018786057.gif

nnap5d14ss364018786057.gif

; r+ w. s9 r" Z& O/ z点击上方蓝色字体,关注我们
- R+ \& U/ f' o3 Z3 cTablelayout使用表格的方式划分子组件。4 x5 W4 a- l0 c$ F
+ D7 c. R3 I$ ]* Y/ v- B

zk0tipmeb4i64018786157.png

zk0tipmeb4i64018786157.png
8 G. ^1 p! ^6 e" b

9 t$ y& j* v( `) ^TableLayout的共有XML属性继承自:Component。
* v9 O+ ?: L8 X# v3 {" c9 f; Q" _% V, k# h/ J( o0 I* |
TableLayout的自有XML属性见下表:$ ]9 N' W: Q. k+ l" \% v
; O6 w* `2 l; f/ m9 _

+ O% I" D) w( _7 G9 _! a4 v' Z                        ' J+ h8 J7 U5 X2 s; y6 P+ n
                        属性名称
; ]* O7 x! u- S9 Y! y/ S                       
4 E7 u( U; j9 m4 C/ j8 ~                       
4 a2 B1 H) r5 D# E& i9 M                        中文描述
! E5 s( d9 ^6 {6 R                        4 H2 d8 H3 [9 f9 B9 I6 T2 q  ^
                       
+ l# v0 b1 c% J$ t2 W                        取值
; S8 U7 [9 ~' c. R' Z, e8 a, _" {                       
; u0 d0 y) j) f  G) F* |& e                        % R! W/ ?- C2 j2 V7 S
                        取值说明
8 o4 x5 M5 E+ ^0 o                        5 b/ l# n0 c) N9 U
                       
& S4 E, a' H. E                        使用案例
1 @. V- L& L- _% y                        & m1 N8 T' L. P3 ]
                # i2 q$ ]5 Y4 f" g
       
& l$ ]  H* y9 _        ' k2 H" B  N8 k' B
               
7 V5 J8 l; |0 X* L                       
7 i* M+ w1 g: n" o( L                        alignment_type/ E5 v) H$ j! C8 f6 E5 d
                       
! @4 ?  Y% v) Y                        - X4 g: C0 P3 F2 q# ]( J
                        对齐方式
) u' ^, H1 }* C6 I- r                       
- `2 c: |/ }0 T: P                       
8 s$ x9 E2 l( |- N; b! H0 F                        align_edges
: |: K0 h% b' P) F+ r) t. a  N                       
4 r1 u8 L+ n9 @, l3 Y; Q3 o                        ! u- b! r% J( ]3 v& V1 S, T, _+ Y+ v
                        表示TableLayout内的组件按边界对齐。
* C8 a7 [! e$ t9 T% _/ M                        9 I6 k4 a+ e' B9 \+ P
                       
# [& c5 k& m+ r* T8 B) ~3 x                        ohos:alignment_type="align_edges"
* T1 c7 l' U- i7 c1 d) g                       
- u) V; @) d3 w                ( H- D* Y5 e( |1 N
               
; o/ N" t2 O3 V0 ~- v, g                        * ]! I2 a& O: u8 b' u$ b
                        align_contents
, w0 l( q+ {+ u  N/ L$ Q                       
6 R/ \' z5 o$ c' h& V& W                       
" [' h, X# g( S* x- R# l3 X                        表示TableLayout内的组件按边距对齐。
1 {: y  C6 p/ u9 `                        / Y! M2 Q% c$ K% w5 G
                        $ k6 F0 l5 O* Y
                        ohos:alignment_type="align_contents"- [6 o3 B. e/ b4 b
                       
  T( R( ?5 g/ p/ p( s5 _' R% w                - w# I5 s+ Y2 n  j3 R( K, u
                * k( Q4 d6 S% W
                       
. u1 S1 P6 J7 X( R1 X+ E5 D% U/ \                        column_count5 s1 M8 b& d2 `
                        / f8 A+ g5 L) `# y7 [5 \* ]1 i+ j
                       
& I% c' p& c! A: a0 [& V; W                        列数- x( w+ g- v" t9 E' O* f; v) \, [$ h
                        5 P+ D. @/ B$ D! L; A- ~7 `
                       
& _0 K2 p3 V  o8 U                        integer类型
* S) H  {1 f" S5 a) c% E                       
2 Z/ F9 s: A  A' c                       
' h; m5 U; _  o                        可以直接设置整型数值,也可以引用integer资源。7 M; p% F' M$ r
                        1 B) Q" E* t6 W+ o
                       
+ S9 P, m1 F, R" ?. \( D6 L+ o* X                        ohos:column_count="3"" g2 N  Q+ m( u8 l( Y9 N$ R' v' ~8 P0 w
8 v& I) D/ |% t, n
                        ohos:column_count="$integer:count"
( W+ S3 t0 O0 e3 m6 a) s                        " q  |  h8 ^; X% s3 @6 d
                6 G- x7 _3 q/ k9 h: |) d# O: E
               
- c' @' \$ D" n' w! v, T0 y                        : K$ q- o: V2 ]1 ^. Z
                        row_count
: U3 ?; Q, Y/ z. S% y9 b9 p% m                        9 ~6 i" k7 s  J- k
                       
5 u- j5 u& N1 }# H& i                        行数
0 R" t# H7 G0 f- C; |                        : {! g4 p% t3 S( K0 t
                       
/ w5 ~" x) p, u* v* \7 p& k                        integer类型9 p3 O3 Z7 J, ^. x0 P2 w. i  c  n* ^0 V7 |
                        7 r2 f5 V/ `- U- p$ s0 d
                       
. F! N( q" E0 O+ A                        可以直接设置整型数值,也可以引用integer资源。
7 x" ~( F% o7 Q3 v, v* L; v                       
( D. ~( Y) c1 U- G: I                       
. K/ z: j( }* i% @* [# j/ i                        ohos:row_count="2"2 q5 x/ F! }( k1 i* g6 y
& z% i: K* }( @( k! a' P0 k' R
                        ohos:row_count="$integer:count"4 z/ D" M: S4 H/ Y/ c0 a, n% W
                       
* B# H4 t! n# ]/ g               
4 L& j- h) q8 T+ R/ a' y( m) x: }               
2 {9 I+ J+ u+ e                       
3 \8 ?! I( `( F! S                        orientation$ L# B) n0 l% M/ ^1 X* ]
                        ; c7 ^# z" s! {1 ?: J
                       
4 S* m4 p; S7 F8 x0 Y- r                        排列方向
7 {4 Q3 \0 y# S7 d7 B, E                       
$ p8 p  F' t! ?2 o7 \                       
# y& m' x1 p6 _+ k5 H6 I; V                        horizontal6 u  {, I! ]+ L6 g4 e5 N' e$ D
                        / m" N. {9 `; v9 @; v) K" o! v
                        8 |& B6 `, ]2 R. O1 H1 K) L/ V
                        表示水平方向布局。3 {) V7 Z+ h  x& o
                        ; \8 E9 ~. L  W
                        - z5 |2 H2 Q; D: ]% w
                        ohos:orientation="horizontal". G- ?* G: b/ _( h% Z# ^7 n
                       
2 L4 {* ~5 u( ^, ^* A6 K               
. a7 {; I' D& ^+ F, U                # a' P3 u0 K5 Z, W) `
                       
& M) ~4 N) M: j  B5 l: b: n+ S                        vertical! n9 _  X( A7 ?# \, \; q
                       
8 [: S& t1 }! U, n                        ) _% Q  p& O3 V3 t4 N
                        表示垂直方向布局。  x1 w* j: G: [6 b* y, {" L, U
                        ! a: S8 k$ b/ k2 p5 A/ Q  D2 }
                       
3 F; q% ]2 Z3 h                        ohos:orientation="vertical"( w8 `9 W6 o5 Y$ u
                        # R. X4 T5 n7 D: q% y0 P
                : [) W% x- }, g# _. s" o0 I: \
在XML中创建TableLayout,示例代码如下:# ^) S4 ~- J0 z4 G2 y
  • [table]/tablelayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"    ohos:height="match_parent"    ohos:width="match_parent"    ohos:background_element="#87CEEB"    ohos:padding="[table]/tablelayout1 u. r$ v0 K5 ^5 X
    在graphic文件夹下创建Text的背景table_text_bg_element.xml,示例代码如下:
    , ?/ b8 o4 T2 a- b3 |
  • "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" 4 m! d7 t5 ]+ ~, F
    在TableLayout布局中添加子组件。2 }; k2 R: d4 S4 n* ]. R
    & f' \- C4 b& P" P. B  ~
  • 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 M; _( N% {$ ]" h% M2 g3 v
        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"/>( ^1 \- ]6 p0 G4 e8 l# K
        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"/>
    6 o6 d9 K# G- |/ W, r    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]
    9 r% x2 {* v/ N/ O, l4 S, mTableLayout默认一列多行。
    5 t5 P- ?4 \1 U$ h! |& I' P" @; W- _0 _$ i8 D

    vdnwwxxbhxe64018786257.png

    vdnwwxxbhxe64018786257.png
    " E  O7 M. Z- E9 _0 y6 `; S
    ) N2 d% K5 X1 ?( h% H9 n
    设置行列数:
    / u" |+ L+ m: s: Q
    9 @6 j3 R$ d2 s# S
  • ...    ohos:row_count="2"    ohos:column_count="2">
    + R8 U" ]1 A- v8 N6 {设置TableLayout的行为2,列为2效果。/ a( w8 B. Z/ i0 E

    1 I8 G) m: f6 k5 O! x1 t1 o

    jjd32zse15f64018786357.png

    jjd32zse15f64018786357.png

    6 K% N7 I* T* J2 f/ x) Z1 ^1 n( t6 Z! [; Z0 v
    在XML中设置布局排列方向,以“vertical”为例:% M" _% i1 Q- {! V- U% u
    # }* J+ S$ d* Q2 n% q* l, j4 X, q
  • ...    ohos:orientation="vertical">    ...
    ( D0 V% {  {4 s! _2 ?! @& F设置布局排列方向为“vertical”的效果。: v# U* e( T( `# c# I5 S& O

    - X( L+ [4 e! y! \2 r' {

    wxoeuke3cso64018786457.png

    wxoeuke3cso64018786457.png

    6 x4 x/ ^$ {& v% B# O
    ( s$ Z: w+ I% T* Y  ^6 {6 V7 `* qTableLayout提供两种对齐方式,边距对齐“align_contents”、边界对齐“align_edges”,默认为边距对齐“align_contents”。代码如下:( Q6 M+ w% M: J. c" @' q! D

    3 b6 Y6 b/ S- w& u# R7 k* [
  • 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"># S( r. t  \8 H8 Y" a" j& K
        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"/>; w6 {7 a; ^* e
        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"/>
    6 ]' o2 m- g& {& `7 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"/>
    ! }( Z8 z( \0 h" o* |    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"/>3 K8 |  W9 B6 T' W) C4 T7 y$ 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"/>
    3 L8 z1 Z- a9 \' Q' i( f    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"/>, G$ r8 g4 K; X3 G
    边距对齐效果:" C: o& d  I  [1 G
    ; n) E9 |- I# `5 L& ^& V" g

    1qzwejhiyoq64018786558.png

    1qzwejhiyoq64018786558.png
    ) D9 m0 b/ ~* n

    - s. k! F6 ~  a& j. S$ y& [4 K3 s将TableLayout的对齐方式修改为边界对齐。$ }4 v% A" |- ], f& ~$ k1 L7 ]) }

    2 Z* c, u7 y2 G, Y! J) u) I
  • ...    ohos:alignment_type="align_edges">    ...$ u" h' N* y% V6 c# b) @5 n
    边界对齐效果:
    7 V! J5 s  T( M" J
    $ j3 H4 P3 j: b6 j

    v42rclvnw4p64018786658.png

    v42rclvnw4p64018786658.png
    $ |1 v- b/ H$ m8 p7 {4 S: C
    4 p: P" w- I2 o+ E" i: ~; E4 D- M; o
    引用graphic文件夹下的背景资源文件为layout_borderline.xml,示例代码如下:$ w- g( n2 Y1 g$ P/ f$ p
    6 p# F+ W7 S" L- `# V5 {3 r, t
  • "http://schemas.huawei.com/res/ohos" ohos:shape="rectangle">    ohos:radius="5vp"/>    ohos:width="1vp"        ohos:color="gray"/>
    % E* I# \% j& ?% c: i. p
    7 {& }/ e4 k0 x; Y1 wTableLayout合并单元格的效果可以通过设置子组件的行列属性来实现。
    % a, w% l; X5 `# @/ K
    % d) y0 C$ _- a8 n设置子组件的行列属性均为2的效果展示:
    - g* D$ t; s$ {$ l9 i; @4 }$ n/ G" a7 P( |& i

    bwmgyokcivs64018786758.png

    bwmgyokcivs64018786758.png
    0 [$ U4 _, k* ^

    + W) ^. M0 t2 h* P$ `在XML中创建TableLayout,并添加子组件,代码如下:' D( j( U0 `+ y2 r
    + q; x  A# q4 R$ A7 R
  • 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">4 Y& g. C7 j7 T0 ^7 Y4 _/ ~
        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 G) h0 ?$ Q& Z: [) @8 G! ?    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"/>& n1 o. P+ B$ I6 A- L3 G+ ~; D
        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"/>$ X+ B5 g( Y. W
        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"/>
    6 p5 k2 |1 h2 Z5 q7 M- W  S$ 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"/>
    ( K! |5 H* V0 v- V/ ?    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"/>
    8 u, a" @5 N( ]" \$ B! u4 v在Java代码中设置子组件的行列属性,代码如下:
    ( W% n! l4 V, |/ \
    4 G, u0 ^  C; W, ~0 f5 t/ E
  • @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);    }
    $ e- h9 ?: z- f* V    private int vp2px(float vp) {        return AttrHelper.vp2px(vp, getContext());    }9 w1 W! N6 |2 U
    在设置子组件的行列属性时,TableLayout剩余的行数和列数必须大于等于该子组件所设置的行数和列数。
    $ k0 h1 O1 t, S; b$ `6 v( ~7 s
    7 ~- X" K$ b5 ]4 I目前仅支持Java代码设置TableLayout子组件的行列属性。+ L' c3 p( p6 O
    在创建子组件的行列属性时,还可设置子组件的对齐方式,修改上述Java代码如下:
      O% t2 I$ @' t
      @8 a) n' E; C" g7 S; k8 J$ r) `3 q
  • @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);        ...    }
    , |' r1 W* r7 A4 h: i$ J# _4 y子组件的对齐方式设置为ALIGNMENT_FILL的效果:/ j7 f- Y$ @5 E2 }: W; t

    3 D; f8 V) ]2 J( u. J0 `) E0 ?

    kwezhlemrcu64018786858.png

    kwezhlemrcu64018786858.png

    7 C# A5 V. B" ^' H' M! M) a( z, _: O$ c
    设置子组件的权重,代码如下:
    ( O' f) p( E( Z, Y0 {' X$ u" v0 }' q) S$ r
  • @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);
    8 [% S1 i0 G* B) U! h        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);    }! R/ `% j4 A+ k1 T
    上述代码将子组件的宽度权重设置为1.0,每行子组件会均分TableLayout的宽度,所以需要设置TableLayout为固定宽度或match_parent。
    2 S  E. x8 M. b- N" a* t
    * n: }9 z% s' r6 @
  • ohos:width="match_parent"    ...>
    6 I3 R1 c& r- m. Z6 R1 ^: H) @1 W    ohos:id="$+id:text_one"        .../>
    4 t: G, J. P% h% s4 ?1 j* v    ohos:id="$+id:text_two"        .../>
    / M/ |/ J+ }* A" ?1 f1 X* Y    ohos:id="$+id:text_three"        .../>. u9 I4 H: ~6 R/ g  N$ u* |+ l
        ohos:id="$+id:text_four"        .../>' @* p" K7 ^, o  |! Y' d: z
        ohos:id="$+id:text_five"        .../>
    " w0 m5 }+ X# _, Q2 A0 d. b# \    ohos:id="$+id:text_six"        .../>[table]
      P& ]0 ~" ~/ x! D0 t# D) d& H. ^将子组件的宽度权重设置为1.0的效果展示:
    6 T# y+ R  c, L9 p# E: b5 |. c% z0 q  a* d2 e

    2hed5d0clfr64018786958.png

    2hed5d0clfr64018786958.png

      X1 W; n6 U2 R; Q
    7 a- b  }3 u; Z; f# o4 }7 N( [3 R

    0lzvlcjvo2264018787058.png

    0lzvlcjvo2264018787058.png

    " d8 N: ^! r2 U* P3 K  U; I2 d# ~) h往期推荐基于Mobile SDK V5版固件开发大疆无人机手机端遥控器(5)4 r9 X3 Q) Y' j
    一种高速ADC和DAC转换电路分享1 x/ X' d6 N* q1 b1 V( ^
    一文搞懂CAN和CAN FD总线协议
    / h/ K; J4 @: ?, tLabVIEW和Arduino的巧妙结合(基础篇—1)* p; Z  ~* b- E& a- O* k
    LabVIEW设计自定义滚动条2 b, s2 A, w# V) H
    . |+ H2 ]! j1 x6 ~

    dzdnnjcmsp464018787158.jpg

    dzdnnjcmsp464018787158.jpg
    & F: X5 q, h- i- _% p" L

    % E! R5 N" D7 u; K. D

    fyoqsj2br5r64018787258.gif

    fyoqsj2br5r64018787258.gif
    ) ?2 s/ O8 f3 M7 [: ?! z! |
    点击阅读原文,更精彩~
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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