본문으로 바로가기

[JETPACK Compose] Column() 함수 내부 인자 테스트

category Android_app 2년 전

Column() 함수

  개요

  : 자식 요소를 열 단위(수직 or 세로)로 배치시 사용합니다.

   A layout composable that places its children in a vertical sequence.

 

 

  함수 정의

 

 

 

 

함수 인자 테스트

  modifier

  .width ()  ,  .height() 사용하기

 

Row{
   Column(
        modifier = Modifier
            .width(100.dp)
            .height(200.dp)
            .background(Color.Green)
            .border(BorderStroke(3.dp, Color.Blue), CircleShape)
            .padding(20.dp),
    ) {
        Text("1st col")
        Text("2nd col")
        Text("3rd col")
    }
    Column(
        modifier = Modifier
            .width(250.dp)
            .height(300.dp)
            .background(Color.Yellow)
            .border(BorderStroke(3.dp, Color.Blue), CutCornerShape(10.dp))
            .padding(20.dp),
    ) {
        Text("4th col")
        Text("5th col")
        Text("6th col")
    }
}

  : Row scope 안에 Column 두개를 만들고 width와 height 를 적용해 봤습니다.

위상태에서 RowScope를 Surface 로 감싸면 다음과 같습니다.

Surface (color = Color.LightGray){
    Row {
       ......  // 위의 소스와 동일
    }
}

  ==> LightGray 부분이 Surface 에 의해서 그려지고 그위에 Row ==> Column() 2개가 그려짐.

 

 

 

  .weight()

    :width가 아닌 상대적인 크기로 배치시 사용합니다.

     2개의 Column을 반으로 나누기 ( .weight(0.5f)

Surface (color = Color.LightGray){
    Row {
       Column(
            modifier = Modifier
                .weight(0.5f)
                .height(200.dp)
                .background(Color.Green)
                .border(BorderStroke(3.dp, Color.Blue), CircleShape)
                .padding(20.dp),
        ) {
            Text("1st col")
            Text("2nd col")
            Text("3rd col")
        }
        Column(
            modifier = Modifier
                .weight(0.5f)
                .height(300.dp)
                .background(Color.Yellow)
                .border(BorderStroke(3.dp, Color.Blue), CutCornerShape(10.dp))
                .padding(20.dp),
        ) {
            Text("4th col")
            Text("5th col")
            Text("6th col")
        }
   }
}

 

  2개의 colmn을 3:7 로 나누기  (weight(0.3f) && weight(0.7f)  또는  weight(3f) && weight(7f)  

Surface (color = Color.LightGray){
    Row {
       Column(
            modifier = Modifier
                .weight(0.3f)
                .height(200.dp)
                .background(Color.Green)
                .border(BorderStroke(3.dp, Color.Blue), CircleShape)
                .padding(20.dp),
        ) {
            Text("1st col")
            Text("2nd col")
            Text("3rd col")
        }
        Column(
            modifier = Modifier
                .weight(0.7f)
                .height(300.dp)
                .background(Color.Yellow)
                .border(BorderStroke(3.dp, Color.Blue), CutCornerShape(10.dp))
                .padding(20.dp),
        ) {
            Text("4th col")
            Text("5th col")
            Text("6th col")
        }
   }
}

==> 2군데 이상 사용해야 의미가 있습니다.

 

  .padding  

     : 상하 좌우의 여백넣기

Row {
   Column(
        modifier = Modifier
            .wrapContentHeight()
            .wrapContentWidth()
            .background(Color.Green)
            .padding(start=5.dp,top=10.dp,end=10.dp, bottom = 5.dp),
    ) {
        Text("1st col")
        Text("2nd col")
        Text("3rd col")
    }
}

 

start=5.dp,top=10.dp,end=10.dp, bottom = 5.dp

 

 

  .wrapContentWidth() , .wrapContentHeight() , .wrapContentSize()

    : 텍스트 길이에 사이즈 맞추기

 

==> 미적용상태 소스코드

Column(
    modifier = Modifier
        .height(200.dp)
        .width(200.dp)
        .background(Color.Green)
        .border(BorderStroke(3.dp, Color.Blue), RectangleShape)
        .padding(30.dp)
) {
    Text("1st col")
    Text("2nd col")
    Text("3rd col")
}

 

.wrapContentHeight() 적용

.wrapContentHeight()    //   Alignment.CenterVertically 적용

 

.wrapContentHeight(align= Alignment.Top)

.wrapContentHeight(align= Alignment.Bottom)

 

 .wrapContentWidth() 적용

 

.wrapContentWidth()   // Alignment.CenterHorizontally

 

.wrapContentWidth(align=Alignment.Start)

 

.wrapContentWidth(align=Alignment.End)

 

 .wrapContentSize() 적용

.wrapContentSize()

 

 

  .fillMaxWidth() , .fillMaxHeight() , .fillMaxSize()

  : .width() && .height() 제거후 테스트

.fillMaxHeight()

 

.fillMaxHeight(fraction = 0.5f)   // 최대 높이의 0.5크기

 

.fillMaxWidth()

 

 

.fillMaxSize()

 

 

  .drawBehind

.drawBehind {
    this.drawLine(Color.Red, Offset(0f,0f) , Offset(50f,50f) )
    this.drawRect(Color.Yellow,Offset(70f,70f), Size(50f,50f))
}

 

  .verticalScroll

   :  상/하 스크롤이 verticalScroll 미적용시 disable 되어 있습니다. 스크롤시 참고하세요.

     LazyColumn() 의 경우 default 로 verticalScroll 이 동작합니다.

@Composable
fun ColumnTest(){
	val scrollState = rememberScrollState()
    Column(
        modifier = Modifier
            .verticalScroll(scrollState)
    ){
        for(i in 1..30) {
            Text(text = "Hello $i")
        }
    }
}

 

 

  verticalArrangement 

   : 세로측 위/아래 정렬 설정

verticalArrangement=Arrangement.Top,

 

verticalArrangement=Arrangement.Bottom,

  horizontalAlignment

  : 가로측 좌우 정렬 설정

horizontalAlignment = Alignment.Start,

 

horizontalAlignment = Alignment.End,

 

<기타 >

  안드로이드 다큐먼트 링크

 

 

 

보완중입니다.

추가요청 사항이나 잘못된 부분 있으면 댓글 부탁드려요.

 

그럼 수고하세요.

반응형