Краткая версия:
Я пытаюсь создать в своем приложении экран, на котором в столбце будет много текстовых полей, и я хочу реализовать эту функциональность: когда я нажимаю на текстовое поле, появляется клавиатура вверх, и если клавиатура закрывает текстовое поле, экран будет прокручиваться соответствующим образом, чтобы текстовое поле было видно над клавиатурой. Кажется, все, что я пробовал, не работает. Есть идеи, как это сделать?
Расширенная версия:
Я попробовал 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 ... e-somethin
Почему мой BringIntoViewRequester не работает в Compose? или мне следует использовать что-то другое? ⇐ Android
Форум для тех, кто программирует под Android
1728683553
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")
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79079800/why-does-my-bringintoviewrequester-not-work-in-compose-or-should-i-use-somethin[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия