Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >最优柔性盒布局算法

我正在实现由CSS3柔性盒布局模块定义的W3C,它类似于用于xul的Mozilla盒模型。虽然这些标准指定了模型的行为方式,但它们没有给出应该如何实现它们的任何细节。

我感兴趣的模型的部分是:

  1. 盒子有宽度和高度。
  2. 盒子可以包含其他的盒子。
  3. 容器盒(父盒)负责调整它们包含的箱子(子盒)的大小和定位。
  4. 盒子的方向可以是水平的也可以是垂直的。该方向确定子框的位置和大小。
  5. 子盒可以是灵活的,也可以是不灵活的。如果子框不灵活,则按宽度和高度参数中指定的大小绘制。如果它是灵活的,那么它将被调整大小以适应父容器中可用的空间。
  6. 灵活性是相对于同一容器中的其他子框而言的,灵活性较高的箱子比灵活性较低的箱子的尺寸调整得更多。
  7. 子框可以限制为最小或最大大小。如果子框是灵活的,父框将永远不会将其调整到最小大小以下或大于最大大小。

特性1-5可以非常有效地实现。功能6是有问题的,因为我能想到的最有效的算法是相当天真的。该算法的工作原理如下:

  1. 把所有的盒子放在一个列表中。
  2. 循环遍历每个子框并调整大小,使用灵活性确定要调整大小的数量。
  3. 如果大小超过其中一个限制,则将框大小设置为限制并从列表中删除,然后从列表的开头开始。

步骤3是效率下降的地方。例如,如果列表中有十项,而最后一项具有约束,则算法计算前九项的大小,然后当到达第十项时,需要重做所有计算。我已经考虑过保持列表的排序,并首先调整所有受约束的框的大小,但是这需要增加复杂性和排序列表的开销。

考虑到这是浏览器和框架(XUL、.Net、Flex等)中相当常见的特性,我希望有一个公认的最佳解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-02 00:06:18

大多数箱/容器布局算法使用2通算法。在.NET (WPF)中,它们被称为“度量衡”和“排列”。每个控件都可以测量其内容,并在递归度量值传递中报告“所需的大小”。

在第二次传递(安排)期间,如果子女所需的大小不适合父级,则父级使用其布局算法向每个子级提供实际大小,例如,通过指定按期望大小加权的实际大小。最小/最大的尺寸,盒子的灵活性等可以在这里发挥作用。

有关WPF布局系统http://msdn.microsoft.com/en-us/library/ms745058.aspx的更多信息

Xul布局http://www-archive.mozilla.org/projects/xul/layout.html

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6908846

复制
相关文章
TestNG忽略测试和预期异常
一.有时候我们写的代码还没有构思完整, 但测试case又需要执行,testng提供了@Test (Enable=false) ,可以有助于禁用.
louiezhou001
2020/02/25
8860
策略模式:处理不同策略具有不同参数的情况
策略模式确实在处理不同策略需要不同参数的情况下会显得有些复杂。然而,这并不意味着策略模式不能在这种情况下使用。有几种可能的解决方案:
运维开发王义杰
2023/08/16
7060
策略模式:处理不同策略具有不同参数的情况
Junit 4 Tutorials(Junit 4 教程) 四、Junit4 参数化测试
Junit 4 参数化测试 允许通过变化范围的参数值来测试方法。参数擦测试可以通过以下简单的步骤实现:
亦山
2021/09/14
6010
JUnit5参数化测试的几种方式
参数化测试一直是津津乐道的话题,我们都知道JMeter有四种参数化方式:用户自定义变量、用户参数、CSV文件、函数助手,那么JUnit5有哪些参数化测试的方式呢?
dongfanger
2021/07/20
1.2K0
JUnit5参数化测试的几种方式
JUnit4 参数化测试( Parameterized tests)
  当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不使用JUnit默认的运行器。
明明如月学长
2021/08/27
3.2K0
Spring Boot Junit4 参数化测试Controller
由于Spring测试类上只能有一个@Runwith注解,如果使用@RunWith(Parameterized.class),就无法s使用@RunWith(SpringJUnit4ClassRunner.class)。
明明如月学长
2021/08/27
9590
Junit 实例精讲基础教程(五) JUnit套件测试,一次性运行多个测试用例(测试类的测试方法)
前面我们已经了解了使用Junit进行单个方法的测试、以及如何模拟超时测试和异常测试,抛出一个问题:我不想一个一个地去跑测试用例,应该怎么办呢?Junit套件测试为我们提供了解决方案,它可以使用@RunWith(Suite.class)注解结合@Suite.SuiteClasses({Class1.class, Class2.class,… })注解来一次性执行Class1、Class2,…多个测试用例的测试方法。
青山师
2023/05/04
1.6K0
Junit 实例精讲基础教程(五) JUnit套件测试,一次性运行多个测试用例(测试类的测试方法)
Junit5参数化实战,让测试更优雅
在代码的世界里,有一片自动化的花园,那里的用例是微风吹拂下的花朵,绽放着不同的颜色。在这片花园中,我们常常遇到一个美妙的情景:相同的测试流程,却需要随着业务的风向,切换不同的测试数据。这就像是一支曲子,相同的旋律,却因音符的不同而显得迥然不同。
测试蔡坨坨
2023/09/11
5811
Junit5参数化实战,让测试更优雅
软件测试|Junit5 实现参数化和数据驱动
登录:不同的用户名,不同的密码,不同的组合都需要做登录场景的测试,正常的排列组合下可能会产生多个用例
霍格沃兹测试开发Muller老师
2023/01/09
1.3K0
Junit测试 - mockMVC
使用mock工具可以直接模拟http请求,不用直接产生网络的请求环境,简化了测试流程。
Tim在路上
2020/08/04
1.4K0
如何用Junit5玩出参数化测试的新花样?
这是之前一篇文章《用junit5编写一个类ZeroCode的测试框架》的续集。主要将在之前工作的基础上,围绕参数化测试展开。 框架主要设计点:
Criss@陈磊
2019/12/05
1.5K0
如何用Junit5玩出参数化测试的新花样?
如何用Junit5玩出参数化测试的新花样?
这是之前一篇文章《用junit5编写一个类ZeroCode的测试框架》的续集。主要将在之前工作的基础上,围绕参数化测试展开。 框架主要设计点:
Antony
2020/12/01
9480
如何用Junit5玩出参数化测试的新花样?
JUnit5参数化测试扩展3案例
在参数化测试方面,JUnit5提供了较为丰富的数据源,如@ValueSource,支持提供int、float等基本类型以及String和Class等作为参数,@CsvSource可以提供CSV格式的数据。另外还可以通过@MethodSource来提供任意类型的数据。
Antony
2021/06/28
9580
同时使用Junit4的@Parameterized参数化测试和Spring容器
同时使用Junit4的@Parameterized参数化测试和Spring容器整合 ---- 之剑 2016.4.30 整合Spring容器 @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration public class TestBase { @Autowired protected TedaCaseService tedaCaseService; private TestCon
一个会写诗的程序员
2018/08/20
6700
SpringBoot异常处理五种方式、Junit单元测试、热部署
首先说明一下,这里使用的是Springboot2.2.6.RELEASE版本,由于Springboot迭代很快,所以要注意版本问题。
别先生
2020/05/26
8450
Junit单元测试
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
共饮一杯无
2022/11/28
8930
Junit 4 Tutorials(Junit 4 教程) Junit4 七、超时测试
Junit 4超时测试(Timeout test)可以被用来测试方法的执行时间。 Junit 4 超时测试可以被用在:
亦山
2021/09/14
9250
Myexclipse创建Junit测试
. 下载JUnit的jar文件,下载地址在这里 2. 在MyEclipse中新建一个要测试的项目HelloJUnit 3. 添加一个要测试的类HelloJUnit,代码如下,注意需要先建package Java代码   package com.yukaizhao;   public class HelloJUnit {   public String getMessage(){   return "Hello Junit";       }   }   4. 新建一个单元测试项
xiangzhihong
2018/02/01
7860
Myexclipse创建Junit测试
Junit测试类使用
ha_lydms
2023/08/10
1740
【软件测试】JUnit详解
JUnit是一个用于编写和运行Java程序单元测试的开源框架。 它提供了一组注解和断言方法,以及用于执行测试的测试运行器。通过使用JUnit,开发人员可以轻松地编写自动化测试用例,验证代码的正确性,并且能够快速地发现和修复bug。JUnit的使用可以提高代码的质量和可维护性,同时也有助于进行持续集成和持续测试。它被广泛应用在Java开发领域中,成为了标准的单元测试框架之一。
xxxflower
2023/10/16
5710
【软件测试】JUnit详解

相似问题

具有多个测试的参数化junit测试

30

JUnit测试-分析预期的异常

112

组织预期异常的junit测试

24

JUnit中的多个预期异常

26

Junit测试:测试多个异常

44
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档