Modifier 修飾子

預設

每一個元件都會有修飾子,以下二種方式都是預設修飾子。
注意!代入的Modifier,前面的M為大寫。
kotlin函式指定參數寫法:

Text("Hello", 參數名 = 參數值)
Text("Hello", modifier = Modifier)

Java的方法,沒辦法指定參數名稱,呼叫的時候一定要按照參數順序呼叫,但Kotlin可以宣告參數名,不用按照順序呼叫方法。

方法(參數1, 參數2, 參數3);
1
2
3
4
  // 方法1: 沒有代入modifier = Modifier
  Text("Hello")
  // 方法2: 代入modifier = Modifier
  Text("Hello", modifier = Modifier)

Modifier Chain 鏈式呼叫

無法個別指定,大小、顏色、padding(產生空間間距)。

1
2
3
  Modifier.size(100.dp, 200.dp)
  Modifier.background(color = Color.Red)
  Modifier.padding(8.dp)

使用Chain 鏈式呼叫。

1
2
3
4
5
6
7
8
9
10
@Preview
@Composable
fun GreetingPreview() {
  Text(
    "Hello", modifier = Modifier
      .size(200.dp, 300.dp)
      .background(Color.Blue)
      .padding(8.dp)
  )
}

img

寬高設定

width() height()

width()是寬,height()是高度。

建立寬100dp,高150dp的盒子。

1
2
3
4
5
6
7
8
9
10
@Preview
@Composable
fun GreetingPreview() {
  Box(
    modifier = Modifier
      .width(100.dp)
      .height(150.dp)
      .background(color = Color.Red)
  )
}

如果高度不設,會根據箱子裡面裝的元件,自動調整高度,同理,若只設定height,不設定width,會根據箱子裡面的元件,自動調整寬度。

1
2
3
4
5
6
7
  Box(
    modifier = Modifier
      .width(100.dp)
      .background(color = Color.Red)
  ) {
    Text("Hello", modifier = Modifier.height(20.dp))
  }

img

size()

size也是調整寬高,代入參數名width寬,或參數名height高,就可以設定寬高。

1
2
3
4
5
  Box(
    modifier = Modifier
      .size(width = 100.dp, height = 150.dp)
      .background(color = Color.Red)
  )

img

若只代入一個數值,沒有參數名,代表要建立一個正方形,寬高都是相同。

1
2
3
4
5
  Box(
    modifier = Modifier
      .size(100.dp)
      .background(color = Color.Red)
  ) 

img

background()

設定顏色

1
Modifier.background(color = Color.Red)

根據父元件 決定大小

fillMaxSize()

等同constraint layout中,寬高都是 match parent。
若沒有父元件包住,fillMaxSize()意思就是跟手機螢幕大小一樣。

fillMaxWidth

寬度根據父元件的寬度,若沒有父元件,就是螢幕的寬度。
高度根據內容物(content)的高度,自適應高度。
下面的例子,Box包住Text,Text就是Box的子元件,也是內容物(content)。

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Preview
@Composable
fun GreetingPreview() {
  Box(modifier =Modifier
    .fillMaxWidth()
    .background(color = Color.Blue)
  ) {
    Text(
      text = "Hello !",
      modifier = Modifier
        .background(Color.Red)
        .padding(8.dp)
    )
  }
}

fillMaxHeight

高度根據父元件的高度,若沒有父元件,就是螢幕的高度。
寬度根據內容物(content)的寬度,自適應寬度。

Modifier 設定前後順序

設定前後順序如下:

  1. 大小 : size, width, hight,fillMaxSize, fillMaxWidth, fillMaxHeight
  2. 對齊方式、權重:
  3. 形狀 : clip
  4. 背景顏色 : background, border, alpha
  5. padding : padding, offset

results matching ""

    No results matching ""