You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.1 KiB
162 lines
5.1 KiB
package com.gyf.csams
|
|
|
|
import android.os.Bundle
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.activity.compose.setContent
|
|
import androidx.compose.foundation.layout.*
|
|
import androidx.compose.foundation.text.KeyboardActions
|
|
import androidx.compose.foundation.text.KeyboardOptions
|
|
import androidx.compose.material.MaterialTheme
|
|
import androidx.compose.material.OutlinedTextField
|
|
import androidx.compose.material.Surface
|
|
import androidx.compose.material.Text
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.livedata.observeAsState
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.platform.LocalFocusManager
|
|
import androidx.compose.ui.text.buildAnnotatedString
|
|
import androidx.compose.ui.text.input.ImeAction
|
|
import androidx.compose.ui.text.input.KeyboardType
|
|
import androidx.compose.ui.text.withStyle
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
import com.gyf.csams.account.model.RegisterViewModel
|
|
import com.gyf.csams.ui.theme.CSAMSTheme
|
|
|
|
class MainActivity : ComponentActivity() {
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
|
|
setContent {
|
|
|
|
CSAMSTheme {
|
|
// A surface container using the 'background' color from the theme
|
|
Surface(color = MaterialTheme.colors.background) {
|
|
Register()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* 注册表单
|
|
*
|
|
*/
|
|
@Composable
|
|
fun Register(registerViewModel: RegisterViewModel=viewModel()){
|
|
|
|
Row (
|
|
horizontalArrangement=Arrangement.Center,
|
|
verticalAlignment = Alignment.CenterVertically,
|
|
modifier = Modifier.fillMaxSize()) {
|
|
Column {
|
|
val name:String by registerViewModel.name.observeAsState("")
|
|
Text(buildAnnotatedString {
|
|
withStyle(style = MaterialTheme.typography.subtitle1.toSpanStyle()
|
|
.copy(color = MaterialTheme.colors.primary)){
|
|
append(name)
|
|
}
|
|
withStyle(style = MaterialTheme.typography.subtitle1.toSpanStyle()){
|
|
append("同学您好\n")
|
|
}
|
|
withStyle(style = MaterialTheme.typography.subtitle2.toSpanStyle()){
|
|
append("欢迎使用")
|
|
}
|
|
withStyle(style = MaterialTheme.typography.subtitle2.toSpanStyle()
|
|
.copy(color=MaterialTheme.colors.secondary)){
|
|
append(BuildConfig.APP_NAME)
|
|
}
|
|
})
|
|
|
|
StudentId()
|
|
Name(name)
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 限制文本框最小宽度
|
|
*
|
|
* @param modifier
|
|
* @param content
|
|
*/
|
|
@Composable
|
|
fun BaseColumn(modifier: Modifier = Modifier,content:@Composable ColumnScope.() -> Unit){
|
|
Column(modifier = modifier.width(IntrinsicSize.Min),content = content)
|
|
}
|
|
|
|
/**
|
|
* 学号
|
|
*
|
|
* @param registerViewModel
|
|
*/
|
|
@Composable
|
|
fun StudentId(registerViewModel: RegisterViewModel=viewModel()){
|
|
BaseColumn {
|
|
val studentId: String by registerViewModel.studentId.observeAsState("")
|
|
val isValidStudentId : Boolean by registerViewModel.isValidStudentId.observeAsState(false)
|
|
val focusManager = LocalFocusManager.current
|
|
OutlinedTextField(
|
|
value = studentId,
|
|
onValueChange = { registerViewModel.onStudentIdChange(it) },
|
|
label = { Text(text = registerViewModel.studentIdDesc) },
|
|
placeholder = { Text(text = registerViewModel.studentIdPlaceholder) },
|
|
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
|
keyboardOptions = KeyboardOptions.Default.copy( keyboardType = KeyboardType.Number,imeAction = ImeAction.Done),
|
|
singleLine = true,
|
|
isError = !isValidStudentId
|
|
)
|
|
if (!isValidStudentId) {
|
|
Text(
|
|
text = registerViewModel.studentIdFormat,
|
|
color = MaterialTheme.colors.error
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 姓名
|
|
*
|
|
* @param registerViewModel
|
|
*/
|
|
@Composable
|
|
fun Name(name:String,registerViewModel: RegisterViewModel=viewModel()){
|
|
BaseColumn {
|
|
|
|
val isValidName:Boolean by registerViewModel.isValidName.observeAsState(false)
|
|
val focusManager = LocalFocusManager.current
|
|
OutlinedTextField(value = name,
|
|
onValueChange = {registerViewModel.onNameChange(it)},
|
|
label={ Text(text = registerViewModel.nameDesc)},
|
|
placeholder = { Text(text = registerViewModel.namePlaceholder)},
|
|
singleLine = true,
|
|
isError = !isValidName,
|
|
keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
|
|
keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Done))
|
|
|
|
if (!isValidName){
|
|
Text(text = registerViewModel.nameFormat,
|
|
color=MaterialTheme.colors.error)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
@Preview(showBackground = true)
|
|
|
|
@Composable
|
|
fun DefaultPreview() {
|
|
CSAMSTheme {
|
|
Register()
|
|
}
|
|
} |