Box

Overlay 疊加

img

佈局方式是疊在一起

寫在後面會把前面給疊上

box疊在起來

1
2
3
4
Box(){
    Box(modifier = Modifier.size(200.dp).background(Color.Red)) //前面
    Box(modifier = Modifier.size(100.dp).background(Color.Green)) //後面
}

align() 對齊

align()是給Box中的「Child」使用,Box是父親,Box包著的元件,就是孩子Child。

  • Alignment.Center 垂直置中 + 水平置中
  • Alignment.CenterStart 垂直置中 + 靠右對齊
  • Alignment.CenterEnd 垂直置中 + 靠左對齊
  • Alignment.TopStart 對齊頂部 + 靠右對齊
  • Alignment.TopCenter 對齊頂部 + 水平置中
  • Alignment.TopEnd 對齊頂部 + 靠左對齊
  • Alignment.BottomStart 對齊底部 + 靠右對齊
  • Alignment.BottomCenter 對齊底部 + 水平置中
  • Alignment.BottomEnd 對齊底部 + 靠左對齊

為什麼Start是右邊呢?因為有些語系,寫字起始方向是由左朝右(如阿拉伯文),所以面對不同的語系,「start」這個單字就比較明確的知道,是右邊開始,還是左邊開始。

img

水平垂直置中

1
2
3
4
5
6
7
8
9
10
@Composable
fun testBox() {
  Box(modifier = Modifier
    .size(200.dp)
    .background(Color.Gray)
  ) {
    Text("Hello",
      modifier = Modifier.align(Alignment.Center))
  }
}

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Composable
fun testBox() {
  Box(modifier = Modifier
    .size(200.dp)
    .background(Color.Yellow)
  ) {
    Text("TopStart",
      modifier = Modifier.align(Alignment.TopStart))
    Text("Center",
      modifier = Modifier.align(Alignment.Center))
    Text("BottomEnd",
      modifier = Modifier.align(Alignment.BottomEnd))
  }
}

contentAligment()

contentAligment() 設定Box的所有Child子元件的對齊方式。

如果Box的Child元件,沒有使用align()修飾子,預設就會使用父元件Box的contentAligment()修飾子。

Child元件有使用align()修飾子,就會用自己設定的align()修飾子。

img

預設

1
2
3
4
5
6
7
8
9
10
@Composable
fun testBox() {
  Box(modifier = Modifier
    .size(200.dp)
    .background(Color.Yellow),
    contentAlignment = Alignment.CenterStart
  ) {
    Text("Hello")
  }
}

預設 與 Child自訂

img

1
2
3
4
5
6
7
8
9
10
11
12
@Composable
fun testBox() {
  Box(modifier = Modifier
    .size(200.dp)
    .background(Color.Yellow),
    contentAlignment = Alignment.CenterStart
  ) {
    Text("Hello")
    Text("BottomEnd",
      modifier = Modifier.align(Alignment.BottomEnd))
  }
}

Box中的Box

align是設置Box中的Child元件,但如果Child是Box,原理跟前面Text子元件一樣,align設置的是Child元件(Child Box)在父元件(Parent Box)「中」的位置。

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Composable
fun testBox() {
  Box(
    modifier = Modifier
      .size(200.dp)
      .background(Color.Yellow),
    contentAlignment = Alignment.CenterStart
  ) {
    // 使用預設對齊
    Box(
      modifier = Modifier
        .size(20.dp)
        .background(Color.Blue)
    )
    // 使用自訂對齊
    Box(
      modifier = Modifier
        .size(20.dp)
        .background(Color.Blue)
        .align(Alignment.BottomEnd)
    )
  }
}

以下是舊文章

置中
.align(Alignment.Center)

1
2
3
4
5
6
7
8
9
10
11
Box() {
    Box(
        modifier = Modifier
            .size(200.dp)
            .background(Color.Red)
    )
    Box(modifier = Modifier
        .align(Alignment.Center)
        .size(100.dp)
        .background(Color.Green))
}

img

results matching ""

    No results matching ""