Compose를 사용하면 보통 Composable 함수들은 Class 외부에 선언을 주로 한다. 이때 Class 외부에 있다보니 context를 가져올 수가 없었는데 LocalContext
를 사용하면 context를 쉽게 가져올 수 있다.
사용방법은 굉장히 간단하다.
아래 샘플 소스를 통해 살펴보자
@Preview(showSystemUi = true)
@Composable
fun ExampleComposable() {
/**
* 버튼을 누르면 Progress를 출력하고 터치방지 플래그를 3초간 설정한다.
*/
val activity = (LocalContext.current as MainActivity)
var isProgress by remember { mutableStateOf(false) }
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.fillMaxSize()
) {
Button(onClick = {
isProgress = !isProgress
}) {
Text(text = "Progress")
}
if(isProgress) {
CircularProgressIndicator(modifier = Modifier.align(Alignment.CenterHorizontally))
LaunchedEffect(Unit) {
activity.window.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
delay(3000)
activity.window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
}
}
}
}
LocalContext는 프레임워크 내에 전역변수로 선언되어 있어
특별한 설정없이 바로 호출해주면 된다.
LocalContext.current 를 호출하면 현재 Context를 반환해주는데
Composable 함수 내에서만 호출이 가능하기 때문에
함수 상단에 변수로 할당해주고 사용해주는 것이 좋을 것 같다.
개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.