Как использовать BringIntoViewRequester в Jetpack Compose? Почему моя версия не работает? или мне следует использовать чAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как использовать BringIntoViewRequester в Jetpack Compose? Почему моя версия не работает? или мне следует использовать ч

Сообщение Anonymous »

Краткая версия:
Я пытаюсь создать в своем приложении экран, на котором в столбце будет много текстовых полей, и я хочу реализовать эту функциональность: когда я нажимаю на текстовое поле, появляется клавиатура вверх, и если клавиатура закрывает текстовое поле, экран будет прокручиваться соответствующим образом, чтобы текстовое поле было видно над клавиатурой. Кажется, все, что я пробовал, не работает. Есть идеи, как это сделать?
Расширенная версия:
Я попробовал BringIntoViewRequester, как предлагается во всех найденных мной руководствах, но для некоторых это, похоже, не работает. причина. ниже показано основное действие и использованные составные элементы, так как я не знаю, где я ошибся (я упростил, насколько мог). Будем очень признательны за любые рекомендации!
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
MyTestApplicationTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Surface(modifier = Modifier.padding(innerPadding)) {
MainContent(
inputOne = "Android",
inputOneChange = { /*Nothing*/ },
)
}
}
}
}
}
}

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun MainContent(
inputOne: String,
inputOneChange: (String) -> Unit,
scrollableState: ScrollState = rememberScrollState()
) {

val keyboardController = LocalSoftwareKeyboardController.current
val bringIntoViewRequester = remember { BringIntoViewRequester() }
val coroutineScope = rememberCoroutineScope()

Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(scrollableState),
horizontalAlignment = Alignment.CenterHorizontally
) {

repeat(6) { PlaceholderCard() }

Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
.bringIntoViewRequester(bringIntoViewRequester),
) {
Column {
Text(modifier = Modifier.padding(start = 16.dp, top = 16.dp, end = 16.dp), text = "Please fill something in")
TextField(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp)
.onFocusEvent { focusState ->
if (focusState.isFocused) {
coroutineScope.launch {
bringIntoViewRequester.bringIntoView()
}
}
},
placeholder = { Text("Some input") },
value = inputOne,
singleLine = true,
onValueChange = inputOneChange,
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(onDone = { keyboardController?.hide() })
)
Button(
modifier = Modifier
.fillMaxWidth()
.padding(start = 16.dp, bottom = 16.dp, end = 16.dp),
onClick = { /*Nothing*/ }) {
Text("Click")
}
}
}

repeat(10) { PlaceholderCard() }
}
}

@Composable
private fun PlaceholderCard() {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(16.dp),
) {
Text(modifier = Modifier.padding(32.dp), text = "Placeholder")
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... ion-not-wo
Ответить

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

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

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

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

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