#codenameone
#codenameone
Вопрос:
Я широко использую showPopupDialog(...)
функцию Dialog, и она работает нормально. Я помню, что в прошлом это не работало на Android или были проблемы на Android, но теперь это работает довольно хорошо на Android.
Но у меня проблема со стилем с Android. В принципе, я хочу, чтобы Компонент отображался в середине диалогового окна. Это самый простой случай, иногда я добавляю кнопки на южной стороне. Однако в обеих ситуациях я могу поместить содержимое всплывающего окна точно по центру только на iOS, в то время как на Android возникают проблемы.
Это мой текущий CSS:
@media platform-and {
PopupContentPane {
margin: 0px;
padding: 1.5mm;
padding-bottom: 3.0mm;
}
}
@media platform-ios {
PopupContentPane {
margin: 0px;
padding: 1.5mm;
padding-top: 0px;
}
}
Основное различие между iOS и Android заключается в том, что, хотя iOS корректно работает с этим CSS, независимо от того, направлена стрелка вверх или вниз, на Android, чтобы получить тот же результат, что и в iOS, мне понадобился бы CSS, созданный следующим образом:
@media platform-and {
PopupContentPane-ArrowTop {
margin: 0px;
padding: 1.5mm;
}
PopupContentPane-ArrowBottom {
margin: 0px;
padding: 1.5mm;
padding-bottom: 3.0mm;
}
}
Или что-то подобное (с еще несколькими изменениями).
Итак, на Android, когда стрелка находится внизу, мне нужно дополнительное заполнение снизу. Это все, но это невозможно, потому что в настоящее время нет UUID для PopupContentPane, когда стрелка находится вверху, и другого UUID, когда стрелка находится внизу.
Есть идея или обходной путь? Спасибо
(Добавлю, что пока это единственная ситуация, когда мне нужно использовать тег @media в CSS, чтобы отличать стили iOS от стилей Android.)
Ответ №1:
Изначально, когда мы писали всплывающее диалоговое окно, это была функция только для iOS, поскольку стиль был только на iOS. Мы использовали рамку изображения из 9 элементов для создания всплывающего окна, и мы не хотели копировать этот элемент темы в каждую из собственных тем, поэтому мы оставили это разработчику.
Позже мы придумали возможность показывать стрелку на RoundRectBorder
. Другим преимуществом стал переход на iOS / Android к плоскому дизайну, который превратил ранее сложный стиль диалога в простое сплошное белое всплывающее окно. Итак, мы реализовали эту кроссплатформенную версию в белом цвете. Но поскольку iOS имеет уже существующую границу изображения, она все еще используется в iOS и не была удалена. Вероятно, нам следует удалить его и разобраться с возникающими незначительными проблемами совместимости.
Я недавно работал над этим в InteractionDialog
здесь: https://github.com/codenameone/CodenameOne/blob/master/CodenameOne/src/com/codename1/components/InteractionDialog.java#L786-L815
Возможно, имеет смысл сделать что-то подобное для Dialog
, у которого, похоже, нигде нет этого кода: https://github.com/codenameone/CodenameOne/blob/master/CodenameOne/src/com/codename1/ui/Dialog.java#L1209
Комментарии:
1. Вы дважды помещаете одну и ту же ссылку. В любом случае, я попробовал InteractionDialog вместо Dialog и не увидел никакого преимущества: проблемы с центрированием центрального компонента те же. Является ли идея наличия разных UUID, доступных в зависимости от положения стрелки, как я указал в вопросе, невыполнимой? Очевидно, без ущерба для функционирования уже существующего кода.
2. Я обязуюсь решить эту проблему: github.com/codenameone/CodenameOne/pull/3233