Как обрабатывать позиции клавиатуры в составных объектахAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как обрабатывать позиции клавиатуры в составных объектах

Сообщение Anonymous »

Хорошо, у меня есть составная функция, простая: имя пользователя и пароль — это поля ввода, а под ними — кнопка входа. Когда я нажимаю на ввод имени пользователя, клавиатура открывается и выравнивается по нижней части, поэтому пароль и вход в систему перекрываются. Когда я нажимаю пароль, клавиатура перекрывает кнопку входа в систему, мне нужно, чтобы эти 3 элемента были видны в всегда, когда клавиатура открыта

Код: Выделить всё

@Composable
fun SignInScreen(
signInViewModel: SignInViewModel = hiltViewModel(),
onSignInSuccess: (String) -> Unit // Callback with token on success
) {
val signInState by signInViewModel.signInState.collectAsState()

var username by remember { mutableStateOf("degustatori") }
var password by remember { mutableStateOf("paroli123") }
var errorMessage by remember { mutableStateOf(null) }

// Main screen layout
Box(
modifier = Modifier
.fillMaxSize()
.padding(1.dp),
contentAlignment = Alignment.TopCenter
) {
Column(
modifier = Modifier
.fillMaxWidth(0.5f) // Make the form take up 90% of the width
.padding(2.dp), // Padding inside the form
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
painter = painterResource(id = R.drawable.georgian_wine), // Replace with your actual image resource name
contentDescription = "Logo",
modifier = Modifier
.size(200.dp) // Adjust the size as needed
.padding(bottom = 24.dp) // Space between the image and the text fields
)
Text(text = "Sign In", style = MaterialTheme.typography.headlineMedium)

Spacer(modifier = Modifier.height(8.dp))

OutlinedTextField(
value = username,
onValueChange = { username = it },
label = { Text("Username") },
shape = RoundedCornerShape(16.dp), // Rounded corners for the text field
modifier = Modifier.fillMaxWidth()
)

Spacer(modifier = Modifier.height(16.dp))

OutlinedTextField(
value = password,
onValueChange = { password = it },
label = { Text("Password") },
visualTransformation = PasswordVisualTransformation(),
shape = RoundedCornerShape(16.dp), // Rounded corners for the text field
modifier = Modifier.fillMaxWidth()
)

Spacer(modifier = Modifier.height(24.dp))

Button(
onClick = {
errorMessage = null // Clear previous error
signInViewModel.signIn(username, password)
},
modifier = Modifier.fillMaxWidth(),
shape = RoundedCornerShape(16.dp), // Rounded corners for the button
colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.primary) // Change button color
) {
Text("Sign In", color = Color.White) // Change text color to white
}

Spacer(modifier = Modifier.height(16.dp))

// Handle different sign-in states
when (val state = signInState) {
is SignInState.Loading -> {
CircularProgressIndicator()
}
is SignInState.Success -> {
LaunchedEffect(Unit) {
onSignInSuccess(state.token) // Trigger navigation on success only
}
}
is SignInState.Error -> {
errorMessage = state.message // Set error message
}
SignInState.Idle -> {
// Initial idle state - no action needed
}
}

// Show error message if present
errorMessage?.let { error ->
Spacer(modifier = Modifier.height(16.dp))
Text(
text = error,
color = MaterialTheme.colorScheme.error,
style = MaterialTheme.typography.bodyMedium
)
}
}
}
}
это мой код
Я пробовал gpt, но это совсем не помогло

Подробнее здесь: https://stackoverflow.com/questions/792 ... omposables
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»