|
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
; 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
; 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
, 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
+ 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( Jxmlns: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
( 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
. _% 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
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 yxmlns: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
% 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
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
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
" @# U! s4 o3 R9 i V; @: V0 i) B4 k
( U7 J1 `' a* l; d& }$ M3 W
oq1sin3a4bp640334808.gif
( e) ]3 D9 o& i o
点击阅读原文,更精彩~ |
|