【问题标题】:Codename One app shown in a centered rectangle on wide screens代号 一个应用程序在宽屏幕上以居中的矩形显示
【发布时间】:2018-11-27 12:24:56
【问题描述】:

读者注意:这个问题专门针对代号一。

因为我对同一个应用程序(Android、iOS、Javascript)有多个目标,可以在小屏幕(这是典型的用例)上运行,也可以在宽屏幕上运行,我必须对 UI 做出选择.

我想简化我的生活:纵向模式下的移动设备是我的主要目标,所以...所有宽屏幕(台式机和平板电脑)都会在屏幕中心的垂直矩形内显示应用程序。也许这不是最好的解决方案,但它可以说得通。我想那个居中矩形的宽度是 9 厘米(我的 iPhone 设备宽度约为 7 厘米,我的 Android 设备宽度约为 8 厘米)。

那么...什么是满足此要求的正确方法?

最初我认为我可以使用覆盖show() 方法的代码创建一个BaseForm,在调用super.show() 之前为ContentPane、LayeredPane 和工具栏设置一个左右边距......但这个解决方案在我看来是一个糟糕的方式和开销,因为在这种情况下,我需要重新计算边距并针对屏幕大小的每次更改重新验证 BaseForm ......但是,这个解决方案不适用于 FAB 或对话框。所以...这不是一个解决方案。

如果我可以为包含应用程序的居中矩形之外的所有空间选择背景(图像或颜色),那就太好了。

有更好的主意吗?

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    这可能是我们需要在系统中实现以使其无缝的东西。您选择的任何方法都需要一些工作。

    如果我正在做这样的事情,我会创建一个没有标题的特殊表单作为您的背景。我会给它一个特殊的自定义布局管理器,使内容居中。比如:

    public CenterOneCompnentLayout class Layout {
        public void layoutContainer(Container parent) {
             if(parent.getComponentCount() == 1) {
                 Component cmp = parent.getComponentAt(0);
                 cmp.setWidth(convertToPixels(9));
                 cmp.setHeight(parent.getHeight());
                 cmp.setY(0);
                 cmp.setX(parent.getWidth() / 2 - cmp.getWidth() / 2);
             }
        }
    
        public Dimension getPreferredSize(Container parent) {
             return new Dimension(100, 100);
        }
    }
    

    现在只需将实际表单添加到此背景表单。其余的应该“按原样”工作。我认为您需要注意一些事情,并且由于表单的嵌套,这种黑客攻击可能会产生一些副作用。但最终它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2011-09-30
      • 2021-06-04
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      相关资源
      最近更新 更多