Вставка Textfield в Top App BarAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Вставка Textfield в Top App Bar

Сообщение Anonymous »

На моем экране Compose, который я передаю фрагменту XML. < /p>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val activity = requireActivity() as CoreMainActivity
composeView.setContent {
LanguageScreen(
languageViewModel = languageViewModel
)
}
}
< /code>
У меня есть JetPack Compose Top Bar в каркасе, и я имею текстовое поле в заголовке, подобном этому < /p>
Scaffold(
modifier = Modifier.fillMaxSize(),
topBar = {
SearchTopAppBar(
title = "My App",
onSearchClick = { isSearchActive = true },
onBackClick = {
if (isSearchActive) {
isSearchActive = false
searchText = ""
}
},
isSearchActive = isSearchActive,
searchText = searchText,
onSearchTextChanged = { searchText = it },
onSearchTextSubmit = {
// Handle search submit
}
)
}
) { innerPadding ->
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SearchTopAppBar(
title: String,
onSearchClick: () -> Unit,
onBackClick: () -> Unit,
isSearchActive: Boolean,
searchText: String,
onSearchTextChanged: (String) -> Unit,
onSearchTextSubmit: () -> Unit
) {
TopAppBar(
title = {
if (isSearchActive) {
TextField(
value = searchText,
onValueChange = onSearchTextChanged,
modifier = Modifier.fillMaxWidth(),
placeholder = { Text("Search...") },
singleLine = true,
colors = TextFieldDefaults.colors(
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
disabledIndicatorColor = Color.Transparent,
focusedContainerColor = Color.Transparent,
unfocusedContainerColor = Color.Transparent
),
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Search
),
keyboardActions = KeyboardActions(
onSearch = { onSearchTextSubmit() }
)
)
} else {
Text(text = title)
}
},
navigationIcon = {
IconButton(onClick = onBackClick) {
Icon(
imageVector = if (isSearchActive) Icons.Default.ArrowBack else Icons.Default.Close,
contentDescription = "Back"
)
}
},
actions = {
if (!isSearchActive) {
IconButton(onClick = onSearchClick) {
Icon(
imageVector = Icons.Default.Search,
contentDescription = "Search"
)
}
}
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.primary,
titleContentColor = MaterialTheme.colorScheme.onPrimary,
navigationIconContentColor = MaterialTheme.colorScheme.onPrimary,
actionIconContentColor = MaterialTheme.colorScheme.onPrimary
)
)
}
< /code>
Теперь есть одна проблема, которую моя панель заголовка в порядке, пока я не открываю клавиатуру из текстового поля. Когда клавиатура откроется, она сдвигает всю верхнюю панель приложений вниз. Как я могу предотвратить это. < /p>
Пока я пытался добавить < /p>
Scaffold(
modifier = Modifier
.fillMaxSize()
.windowInsetsPadding(WindowInsets.statusBars)
)
< /code>
вместо того, чтобы простираться на верхнюю панель приложений внизу, теперь вверху белый разрыв.




Подробнее здесь: https://stackoverflow.com/questions/794 ... -whole-top
Ответить

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

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

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

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

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