好的,我做了一些对我有用的事情,我要澄清一下,我只学习Compose几周,所以不要对我期望太高,我只是做了一些可能不是正确方法但对我很实用的东西,也许对其他人也有用。
我做的是创建一个继承ComponentActivity()的主类,并使用其中所有的组件。
class Login : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HealthAtHansClientTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
LoginLayout()
}
}
}
}
}
val scrollState = rememberScrollState()
Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
.padding(bottom = 100.dp, end = 40.dp, start = 40.dp)
.verticalScroll(scrollState),
verticalArrangement = Arrangement.SpaceAround,
) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(top = 30.dp)
) {
Text(text = "Hola !", style = TextStyle(fontSize = 40.sp))
}
Row(horizontalArrangement = Arrangement.Center) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
TextField(
maxLines = 1,
modifier = Modifier.fillMaxWidth(),
value = documentNumber,
onValueChange = { documentNumber = it })
Spacer(modifier = Modifier.height(100.dp))
TextField(
maxLines = 1,
modifier = Modifier.fillMaxWidth(),
value = privateCode,
onValueChange = { privateCode = it })
}
}
}
2022年10月更新:以下代码可以解决问题:
class SampleActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState)
setContent {
LazyColumn(
contentPadding = WindowInsets.navigationBars.asPaddingValues()
) {
// items
}
}
}
}
将Activity设置为适应系统窗口并使用contentPadding是关键。
android:windowSoftInputMode="adjustResize"
之后,只需在父部件(如LazyColumn)中添加 Modifier.imePadding()
即可。override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, true)<---add this in activity
activityNavigator.onCreate(this)
setContent {
MainScreen()
}
}
Column(
modifier = Modifier
verticalScroll(rememberScrollState(), reverseScrolling = true)<-add this in column
.fillMaxSize()
.padding(0.dp, navigationBarSize, 0.dp, 0.dp)
) {
TextField(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
shape = RoundedCornerShape(defaultTextRound),
colors = TextFieldDefaults.textFieldColors(
backgroundColor = Purple200,
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent
),
textStyle = DefaultTextStyle.h1,
value = noteTitle.value,
onValueChange = {
noteTitle.value = it
normalNoteViewModel?.noteUpdated()
},
label = { Text(stringResource(R.string.title)) }
)
}
scrollable
修饰符或LazyColumn
,目前还没有办法实现此功能。这是一个已知问题,请给它点赞。如果您不使用滚动视图,请查看此答案。 - Phil Dukhov