【问题标题】:Specify absolute position of GUI element in CN1指定 GUI 元素在 CN1 中的绝对位置
【发布时间】:2017-01-03 13:46:15
【问题描述】:

如何指定屏幕元素(按钮、标签、图像等)按像素或相对位置出现在屏幕上的特定位置?例如以下假设情况:

  1. 以 350x 500y 像素为中心的元素
  2. 一个元素被放置在屏幕下方 65% 和左边缘 40% 的位置,并占据屏幕宽度的 30%。
  3. 元素 B 放置在元素 A 右侧 25 像素处

我观看了几个关于 GUI 构建器和布局管理器的教程视频,并阅读了开发人员指南的几个部分,但看不到如何完成这些看似基本的任务。

【问题讨论】:

    标签: user-interface layout codenameone


    【解决方案1】:

    您可以使用从自定义布局管理器到一些边距设置等工具来完成所有这些操作,但这些期望中的大多数都是“错误的”。

    在分辨率/密度可能发生根本变化的移动设备中,基于像素甚至下沉来放置东西是没有意义的,例如您的应用需要在 iPhone 3gs 320x480 或 480x320 上看起来不错(这将使选项 1 无关紧要),然后它需要在 iPad pro 2732x2048 上看起来不错,密度差异为 3 倍,这意味着任何标准像素在 iPad 上看起来都小 3 倍亲!

    您需要考虑距离的倾角(毫米),而不是像素。然后你需要改变你对定位的看法,以逻辑而非绝对的方式思考,例如像居中,在左边等等这样的词工作......

    关于你的观点:

    1. 您可以通过多种方式执行此操作,但所有这些都是不正确的,因为它们会在各种设备上中断。您可以将自己的布局管理器实现为explained in the developer guide。 您也可以仅使用以像素/毫米为单位的边距将组件移动到位。

    2. 与 1 的答案相同,因为边距支持百分比、毫米和像素。要确定宽度/高度,只需覆盖 calcPreferredSize() 方法,但这又是一个有问题的概念,因为您可能会与密度显着改变图像/字体大小的事实相冲突...

    3. 这是对边距的有效使用,尽管我会使用 3-4 毫米之类的东西,因此它在不同设备上看起来是一致的。

    【讨论】:

    • 谢谢。我明白你的观点与广泛变化的屏幕尺寸和分辨率有关。但是,如果知道屏幕的尺寸,则可以为要放置的元素定义特定的 x,y 位置。我是否认为这样做的唯一方法是在没有自定义布局管理器的 CN1 中使用边距?假设一个元素是动态调整大小的。边距不太有用,因为它指定了对象边缘的位置,而不是中心。我们可以根据元素的当前大小计算边缘的位置(如果可用),但这感觉有点笨拙。
    • “假设一个人知道尺寸”可以表述为“假设 Codename One 旨在支持一个完全不同的平台”。我们设计代号一是为了使合理的用例变得简单,但一切皆有可能。对于 99% 的用例来说,让 X/Y 定位变得容易是没有意义的,所以做一些没有意义的东西“优雅”不在章程中。由于 Codename One 是为移动设备设计的,我们从第一天开始就处理设备旋转和广泛变化的密度。可变尺寸正是我解释你不能做绝对定位的原因,所以我没有得到你的评论。
    • 仅供参考,如果您要实现特定布局并且在实现它时遇到问题(因此尝试使用绝对位置对其进行原型设计),我建议您改变路线并提交一个涵盖您尝试的布局的问题达到,例如我正在尝试在 Codename One 中做“这个”(这是一个模型/屏幕截图)布局。我该怎么做?
    • 我猜“没有意义”取决于你的观点。我完全理解你反对它的论点,但在某些情况下它是完全合理的。但是,这是否有意义并不是我的问题的重点。如果需要,我们可以在其他论坛上讨论。我只需要知道是否可以将表单元素放置在 CN1 中的特定 xy 位置以及如何操作。听起来可能不是。如果是这样,我可以处理它并使用另一种技术。
    • 如果我理解了你所抱怨的问题的重点,这并不容易(你需要编写一个布局管理器)而不是不可能......这个问题是有问题的,例如:“我怎么做X?”而不是问“我如何实现 Y?”。这是有问题的,因为我无法给出“正确的方法是……”类型的答案,因为我不了解最终目标……将组件放置在绝对 X/Y 坐标中对我们来说毫无意义,因为一个框架,即使它对您的用例有意义。如果我们能做到如此简单,人们会使用它并在设备出现故障时抱怨。
    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 2014-06-18
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 2013-04-02
    • 2019-06-22
    • 2011-05-29
    相关资源
    最近更新 更多