Android Jetpack Compose(Beta)의 Pathway 노트 대략적인 이해
37206 단어 AndroidKotlinJetpack Composetech
배경.
컨텐트
Jetpack Compose의 Pathway
Pathway 여기 있습니다.
개요
1.Compose 소개
2. Compose의 기본 사용 방법
첫 번째 설정은 여기를 참조하십시오.
및 Compose를 사용하는 buildgradle은 기본적으로 다 준비되었으니 이쪽으로 쓰세요.
기본적으로 setContext{}에 Compose 함수를 설정하면 UI를 알릴 수 있습니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Text("Hello world!")
}
}
}
방법에 @Compoosable를 추가하여 변환 가능한 함수로 처리할 수 있습니다.@Composable
fun Greeting(name: String) {
Text (text = "Hello $name!")
}
@Compoosable 방법으로 UI를 선포하고 데이터에 따라 이 @Compoosable 방법을 기본 형식으로 부른다.class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Greeting("Android")
}
}
}
@Composable
fun Greeting(name: String) {
Text (text = "Hello $name!")
}
3. Compose 구성 요소
다음 어셈블리 그룹이 자주 나타납니다.
Surface
요소의 배경색을 설정할 수 있습니다.
setContent {
ComposeSampleTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.primary) {
Greeting("Android")
}
}
}
이렇게 하면 배경색이 이렇습니다.colors.백 그라운드로 만들어주세요.
setContent {
ComposeSampleTheme {
// A surface container using the 'background' color from the theme
Surface(color = MaterialTheme.colors.background) {
Greeting("Android")
}
}
}
자동으로 문자 색상이 됩니다.이는 primary 설정을 했기 때문에 Theme 클래스의 onProimary를 적용한 것이다.여기 설정을 하려면 Theme 레벨을 변경할 필요가 있어요.
그런 게 있어.
fun lightColors(
primary: Color = Color(0xFF6200EE),
primaryVariant: Color = Color(0xFF3700B3),
secondary: Color = Color(0xFF03DAC6),
secondaryVariant: Color = Color(0xFF018786),
background: Color = Color.White,
surface: Color = Color.White,
error: Color = Color(0xFFB00020),
onPrimary: Color = Color.White,
onSecondary: Color = Color.Black,
onBackground: Color = Color.Black,
onSurface: Color = Color.Black,
onError: Color = Color.White
): Colors
Modifiers
UI의 요소에 Padding 등이 표시되도록 지시할 수 있습니다.
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!", modifier = Modifier.padding(24.dp))
}
지정하면 이런 느낌이에요.기타
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!", modifier = Modifier.padding(24.dp).fillMaxWidth())
}
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!", modifier = Modifier.padding(24.dp).fillMaxWidth().clickable {
/* TODO */
})
}
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name!", modifier = Modifier
.padding(24.dp)
.fillMaxWidth()
.scrollable(
rememberScrollState(),
orientation = Orientation.Horizontal
)
.clickable {
/* TODO */
})
}
Column(
modifier = Modifier
.padding(start = 8.dp)
.align(Alignment.CenterVertically)
)
Row(modifier
.padding(8.dp)
.clip(RoundedCornerShape(4.dp)) // 4dp角丸
.background(MaterialTheme.colors.surface)
.clickable(onClick = { /* Ignoring onClick */ })
.padding(16.dp)
) {
등.자주 나오는 것 같아요.Column (Row)
선언에 의하면 이 요소는 세로로 축적되어야 한다고 한다.Lierlayout의 oricontation과 같은 분위기.또한 Row는 horizontal입니다.
Surface(color = MaterialTheme.colors.primary) {
Column {
Greeting("Android")
Divider(color = Color.Black)
Greeting("there")
}
}
Divider
분할선 그은 놈.Color를 지정할 수 있습니다.
animateColorAsState
상태에 따라 색상을 추가하여 애니메이션 변경
@Composable
fun Greeting(name: String) {
var isSelected by remember { mutableStateOf(false) }
val backgroundColor by animateColorAsState(if (isSelected) Color.Red else Color.Transparent)
Text(text = "Hello $name!", modifier = Modifier
.padding(24.dp)
.fillMaxWidth()
.scrollable(
rememberScrollState(),
orientation = Orientation.Horizontal
)
.background(backgroundColor)
.clickable(onClick = { isSelected = !isSelected }))
}
Box
어셈블리를 중첩하려면 를 사용합니다.
Shape
익숙한 Shape.어셈블리 모양을 변경하려면 다음을 수행합니다.
@Composable
fun PhotographerCard() {
Row {
Surface(
modifier = Modifier.size(50.dp),
shape = CircleShape,
color = MaterialTheme.colors.onSurface.copy(alpha = 0.2f)
) {
// Image goes here
}
Column {
Text("Alfred Sisley", fontWeight = FontWeight.Bold)
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
Text("3 minutes ago", style = MaterialTheme.typography.body2)
}
}
}
}
CircleShape은 Rounded Corner Shape(58)의 정의입니다.각환을 각환으로 만들려면 라운드 코너 셰이프(8.dp)를 넣으면 된다.
Scaffold
비계이걸 착용하면 소재 디자인이 적용됩니다.
Scaffold(
topBar = {
TopAppBar(
title = {
Text(text = "LayoutsCodelab")
},
actions = {
IconButton(onClick = { /* doSomething() */ }) {
Icon(Icons.Filled.Favorite, contentDescription = null)
}
}
)
}
) { innerPadding ->
BodyContent(Modifier.padding(innerPadding))
}
topBar
툴바 같은 놈.타이틀과 액션이 추가되었습니다.
Compose 상태 정보
무상태라지만 지금 클릭했는지도 갖고 싶은 게 있어요.
이 경우 mutaate Of와 remember를 사용하면 재조종되더라도 상태가 유지된다.
var isSelected by remember { mutableStateOf(false) }
val backgroundColor by animateColorAsState(if (isSelected) Color.Red else Color.Transparent)
또한 피질도 복원하고 싶으면 리멤버Saveable 사용 var isSelected by rememberSaveable { mutableStateOf(false) }
val backgroundColor by animateColorAsState(if (isSelected) Color.Red else Color.Transparent)
상태 응답
내용이 이런 상태를 유지하면 재활용과 테스트가 어렵기 때문에 상태 응답이 필요하다.
@Composable
fun screen() {
var isSelected by rememberSaveable { mutableStateOf(false) }
content(isSelected = isSelected)
}
@Composable
fun Content(isSelected : Boolean) {
val backgroundColor by animateColorAsState(if (isSelected) Color.Red else Color.Transparent)
}
상태는 다음과 같은 세 가지 방법으로 선포할 수 있다.val mutableState = remember { mutableStateOf(default) }
var value by remember { mutableStateOf(default) }
val (value, setValue) = remember { mutableStateOf(default) }
Desuger로 얻기(value,setValue)는 아래를 가리킨다.value = 現在の値
setValue = 今から代入する値
UI 구성에서 내부 상태 분리
예를 들어 처음부터 복선상자에 값을 입력하려는 요구가 생길 수 있습니다.다만 그것은 사용하는 사람에 따라 다르다.이 경우 과부하 시 제어할 수 있는 함수를 정의한 다음 무상태 함수와 상태 완전 함수로 나뉜다.
재생성 후 UI 상태 복원
Compose의 Layout에 주목
요약(소감)
추기
Reference
이 문제에 관하여(Android Jetpack Compose(Beta)의 Pathway 노트 대략적인 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/96mame/articles/9e2a761ba57656텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)