【问题标题】:Lightweight Popup Dialogs on iOSiOS 上的轻量级弹出对话框
【发布时间】:2020-08-23 09:42:44
【问题描述】:

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

但我遇到了 iOS 问题。有时,当弹出对话框包含很少的文本时,iOS 会为对话框计算错误的 Dimension。它只发生在 iOS 上。

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

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

【问题讨论】:

  • 这个请求的另一个原因是代码stackoverflow.com/a/63537825/1277576在恢复应用后,在iOS上没有显示popupDialog箭头,而在Android上显示,证明轻量级实现问题较少.

标签: codenameone


【解决方案1】:

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

因此,您需要使用设计器工具并定义 PopupDialog 以明确使用RoundRectBorder,或者您需要通过代码来完成(明确将其设置到主题中)。

一个可能有效的技巧(没有尝试过)是在您的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);
}

【讨论】:

  • 这个 hack 很好(我已经稍微定制了它),它的优点是使 iOS 上的弹出窗口几乎与 Android 相同:使用此代码,我不需要使用单独的样式Android 和 iOS 不再存在,而且在大多数情况下(但不是全部)iOS 上的弹出窗口大小问题都得到了解决。这是一个很好的进步,谢谢。
  • 在真正的 Android 和 iOS 设备上,行为是理想的行为,因为我在模拟器中注意到的 Android 和 iOS 之间的差异不太明显:我确认这个 hack 已经解决了一些问题为了我。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2011-06-26
  • 1970-01-01
  • 2015-09-17
  • 2012-06-07
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多