Как предотвратить жест щелчка на экране, когда отображается всплывающее окно?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как предотвратить жест щелчка на экране, когда отображается всплывающее окно?

Сообщение Anonymous »

Когда TooltipBox открыт, щелчок по любому составному элементу на экране не дает никакого эффекта, кроме закрытия всплывающего окна. Как он это делает и какой эффективный способ реализовать это независимо от того, где находится текущий Composable в дереве композиции, когда Popup открыт, поэтому никакой другой Composable из Popup не получает никаких жестов.
Изображение

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

@Preview
@Composable
fun TooltipBoxSample() {
Column(
modifier = Modifier.fillMaxSize().border(2.dp, Color.Blue)
) {
Button(
onClick = {}
){
Text("Some button")
}

val state = rememberTooltipState(
isPersistent = true
)
val coroutineScope = rememberCoroutineScope()

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

Row(
modifier = Modifier.weight(1f)
) {
Spacer(modifier = Modifier.width(100.dp))

TooltipBox(
positionProvider = rememberPlainTooltipPositionProvider(
spacingBetweenTooltipAndAnchor = 16.dp
),
state = state,
tooltip = {

PlainTooltip(
caretProperties = CaretProperties(
caretWidth = 16.dp,
caretHeight = 16.dp
),
shape = RoundedCornerShape(16.dp),
containerColor = Color.Red
) {
Text(
text = "Tooltip Content for testing...",
modifier = Modifier.padding(16.dp)
)
}

},
content = {
Icon(
modifier = Modifier
.size(60.dp)
.clickable {
coroutineScope.launch {
state.show()
}
},
imageVector = Icons.Default.Info,
contentDescription = null
)
}
)
}

}
}
Если вы коснетесь любого места экрана с помощью всплывающего окна Composables получат события щелчка
Изображение

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

@Preview
@Composable
fun PopupOpenCloseTest() {

var showPopup by remember {
mutableStateOf(false)
}

Column(
modifier = Modifier.fillMaxSize()
) {

Button(
onClick = {}
) {
Text("Some button")
}

Box {
Icon(
modifier = Modifier
.border(2.dp, Color.Blue)
.size(60.dp)
.clickable {
if (showPopup.not()) {
showPopup = true
}
println("CLICKED showPopup: $showPopup")
},
imageVector = Icons.Default.Info,
contentDescription = null
)

if (showPopup) {
Popup(
offset = IntOffset(300, 300),
onDismissRequest = {
if (showPopup) {
showPopup = false
}
}
) {
Box(
modifier = Modifier.background(Color.White).padding(16.dp)
) {
Text("Popup Content")
}
}
}
}

}
}
Я проверил исходный код Tooltip и BasicTooltip, но нет места, где оно создает окно или представление, которое отменяет жест или использует его.

Подробнее здесь: https://stackoverflow.com/questions/787 ... p-is-shown
Ответить

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

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

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

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

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