iOS 上的轻量级弹出对话框

Lightweight Popup Dialogs on iOS

在 PR https://github.com/codenameone/CodenameOne/pull/3233 之后,我得到了我想要的弹出对话框(在 Android 上)。他们没问题,文本正确地位于中心,边距和填充都是我想要的。

但我对 iOS 有疑问。有时,当弹出对话框包含的文本很少时,iOS 会为对话框计算错误的维度。它只发生在 iOS.

我的理解是 iOS 上的对话框弹出窗口的实现是本机的,而 Android 上是轻量级的。如果我误解了,请纠正我。由于 Android 实现效果很好,我也想在 iOS 上使用它。这就是我的这个RFE的意思: https://github.com/codenameone/CodenameOne/issues/3234

无论如何,我改变了我的问题:即使没有那个 RFE,我也可以在 iOS 上使用轻量级弹出对话框吗?

是的,但这可能有点棘手。如果你使用 CSS 设置弹出边框会变得很痛苦,因为 this issue.

因此,您需要使用设计器工具并定义 PopupDialog 以显式使用 RoundRectBorder,或者您需要从代码中执行此操作(将其显式设置到主题中)。

一个可能有效的 hack(没试过)是在你的 init(Object) 中使用这个代码而不是 initFirstTheme:

try {
    theme = Resources.openLayered(resourceFile); 
    themeProps.put("PopupDialog.derive", "Dialog");
    themeProps.put("PopupDialog.border", RoundRectBorder.create().
            cornerRadius(2f).
            shadowOpacity(60).shadowSpread(3.0f));
    themeProps.put("PopupDialog.transparency", "255");
    themeProps.put("PopupDialog.bgColor", background);
    themeProps.put("PopupDialog.padding", "4,4,4,4");
    themeProps.put("PopupDialog.padUnit", new byte[]{Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS, Style.UNIT_TYPE_DIPS});
    UIManager.getInstance().setThemeProps(theme.getTheme(theme.getThemeResourceNames()[0]));
    Resources.setGlobalResources(theme);
} catch(IOException e){
    Log.e(e);
}