У меня возникла проблема со значком текстового поля, вложенным в декоратор. Он не обновляется при изменении isPasswordVisible. Однако часть обфускации обновляется при изменении isPasswordVisible. Я помещаю журналы прямо перед IconButton, и он не доступен при изменении isPasswordVisible.
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun PasswordTextField(
state: TextFieldState,
isPasswordVisible: Boolean,
onTogglePasswordVisibility: () -> Unit,
hint: String,
title: String?,
modifier: Modifier = Modifier
) {
var isFocused by remember {
mutableStateOf(false)
}
Column(
modifier = modifier
) {
Row(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
if (title != null) {
Text(
text = title,
style = MaterialTheme.typography.titleSmall,
)
}
}
Spacer(modifier = Modifier.height(4.dp))
BasicSecureTextField(
state = state,
textObfuscationMode = if (isPasswordVisible) {
TextObfuscationMode.Visible
} else TextObfuscationMode.Hidden,
textStyle = LocalTextStyle.current.copy(
color = MaterialTheme.colorScheme.onBackground
),
cursorBrush = SolidColor(MaterialTheme.colorScheme.onBackground),
modifier = Modifier
.clip(RoundedCornerShape(16.dp))
.background(
MaterialTheme.colorScheme.surface
)
.border(
width = 1.dp,
color = Color.Transparent,
shape = RoundedCornerShape(16.dp)
)
.padding(12.dp)
.onFocusChanged {
isFocused = it.isFocused
},
decorator = { innerBox ->
Row(
modifier = Modifier
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = PasswordIcon,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface
)
Spacer(modifier = Modifier.width(16.dp))
Box(
modifier = Modifier
.weight(1f)
) {
if (state.text.isEmpty() && !isFocused) {
Text(
text = hint,
color = MaterialTheme.colorScheme.onSurface.copy(
alpha = 0.4f
),
modifier = Modifier.fillMaxWidth()
)
}
innerBox()
}
IconButton(
onClick = onTogglePasswordVisibility,
modifier = Modifier.height(24.dp)
) {
Icon(
imageVector = if (isPasswordVisible) {
EyeOpenIcon
} else {
EyeCloseIcon
},
contentDescription = if (isPasswordVisible) {
stringResource(id = R.string.show_password)
} else {
stringResource(id = R.string.hide_password)
},
tint = MaterialTheme.colorScheme.onSurface
)
}
}
}
)
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... recomposed
Кнопка со значком Jetpack Compose в декораторе TextField не перекомпоновывается ⇐ Android
Форум для тех, кто программирует под Android
1719942486
Anonymous
У меня возникла проблема со значком текстового поля, вложенным в декоратор. Он не обновляется при изменении isPasswordVisible. Однако часть обфускации обновляется при изменении isPasswordVisible. Я помещаю журналы прямо перед IconButton, и он не доступен при изменении isPasswordVisible.
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun PasswordTextField(
state: TextFieldState,
isPasswordVisible: Boolean,
onTogglePasswordVisibility: () -> Unit,
hint: String,
title: String?,
modifier: Modifier = Modifier
) {
var isFocused by remember {
mutableStateOf(false)
}
Column(
modifier = modifier
) {
Row(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
if (title != null) {
Text(
text = title,
style = MaterialTheme.typography.titleSmall,
)
}
}
Spacer(modifier = Modifier.height(4.dp))
BasicSecureTextField(
state = state,
textObfuscationMode = if (isPasswordVisible) {
TextObfuscationMode.Visible
} else TextObfuscationMode.Hidden,
textStyle = LocalTextStyle.current.copy(
color = MaterialTheme.colorScheme.onBackground
),
cursorBrush = SolidColor(MaterialTheme.colorScheme.onBackground),
modifier = Modifier
.clip(RoundedCornerShape(16.dp))
.background(
MaterialTheme.colorScheme.surface
)
.border(
width = 1.dp,
color = Color.Transparent,
shape = RoundedCornerShape(16.dp)
)
.padding(12.dp)
.onFocusChanged {
isFocused = it.isFocused
},
decorator = { innerBox ->
Row(
modifier = Modifier
.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
Icon(
imageVector = PasswordIcon,
contentDescription = null,
tint = MaterialTheme.colorScheme.onSurface
)
Spacer(modifier = Modifier.width(16.dp))
Box(
modifier = Modifier
.weight(1f)
) {
if (state.text.isEmpty() && !isFocused) {
Text(
text = hint,
color = MaterialTheme.colorScheme.onSurface.copy(
alpha = 0.4f
),
modifier = Modifier.fillMaxWidth()
)
}
innerBox()
}
IconButton(
onClick = onTogglePasswordVisibility,
modifier = Modifier.height(24.dp)
) {
Icon(
imageVector = if (isPasswordVisible) {
EyeOpenIcon
} else {
EyeCloseIcon
},
contentDescription = if (isPasswordVisible) {
stringResource(id = R.string.show_password)
} else {
stringResource(id = R.string.hide_password)
},
tint = MaterialTheme.colorScheme.onSurface
)
}
}
}
)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78698377/jetpack-compose-icon-button-in-textfield-decorator-not-being-recomposed[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия