主要内容

以编程方式管理应用程序调整大小的行为

使用uifigure函数默认可调整大小。当应用程序用户在运行时改变窗口的大小时,组件会自动重新定位和调整大小。

如果你想要更灵活地调整应用大小,可以使用以下方法之一:

使用网格布局管理器

网格布局管理器是一个容器,允许您在网格中布局UI组件。您可以配置网格布局管理器,以指定网格中组件的初始布局和调整行为大小。

方法在UI图形窗口中创建网格布局管理器uigridlayout函数,并指定图形作为第一个参数。设置RowHeight而且ColumnWidth属性,以指定应用程序用户调整图形窗口大小时每行和列的行为。指定RowHeight而且ColumnWidth作为每行或列有一个值的单元格数组。有三种不同类型的行高和列宽:

  • 适合尺寸-指定“健康”.行高或列宽是固定的,以自动适应其内容。当应用程序调整大小时,尺寸不会改变。

  • 固定大小-以像素为单位指定一个数字。行高或列宽固定于您指定的像素数。当应用程序调整大小时,尺寸不会改变。

  • 可变大小-指定与“x”字符(例如,“1 x”).可变高度行填充固定高度行不使用的剩余垂直空间,可变宽度列填充固定宽度行不使用的剩余水平空间。你配对的数字“x”字符是划分剩余空间的权重,其中空间的数量与数字成正比。例如,如果一行的宽度为“2 x”另一个的宽度是“1 x”当应用程序调整大小时,第一行的增长或缩小幅度是第二行的两倍。

例如,这段代码创建了一个有四行的网格布局管理器。第一行的高度调整为适合其内容的大小,第二行固定为200像素,最后两行不均匀地共享剩余的垂直空间。第三行占用的空间是第四行的两倍。

FIG = ufigure;Gl = uigridlayout(图,[4 1]);gl.RowHeight = {“健康”, 200,“2 x”“1 x”};

有关使用网格布局管理器布局应用程序的更多信息,请参见以编程方式布局应用程序

示例:使用网格布局管理器调整应用程序的大小

这个例子演示了如何配置一个网格布局管理器来指定应用程序调整大小的行为。该应用程序包含一个下拉菜单、一个列表框和一个包含一些数据的表格。创建一个3 * 2网格布局的UI图形窗口。对象创建UI组件,并将它们添加到网格布局中布局。行而且布局。列属性。

FIG = ufigure;Gl = uigridlayout(图,[3 2]);Dd = uidropdown(gl);dd.Layout.Row = 1;dd.Layout.Column = 1;Lb = uilistbox(gl);lb.Layout.Row = 2;lb.Layout.Column = 1;TBL =可使用(gl);资源描述。Data = rand(100); tbl.Layout.Row = [1 3]; tbl.Layout.Column = 2;

属性来配置应用程序布局和调整大小行为RowHeight而且ColumnWidth网格布局管理器的属性:

  • 指定“健康”对于第一行。这将自动调整行高以适应下拉菜单的高度。

  • 为第二行指定80像素的高度。这修复了应用程序调整大小时列表框的高度。

  • 指定高度为“1 x”对于第三行。这就填满了剩余的垂直空间。

  • 指定宽度为“1 x”对于第一列和“2 x”对于第二种。这确保了所有组件水平调整大小,并且表总是占用两倍于其他组件的水平空间。

gl.RowHeight = {“健康”, 80,“1 x”};gl.ColumnWidth = {“1 x”“2 x”};

带有两列的UI图形窗口。第一列的宽度是第二列的一半,在列表框上方包含一个下拉菜单。第二列包含一个填满图形窗口的整个垂直空间的表。

通过拖动其中一个窗口角来调整图形窗口的大小。UI组件根据网格布局规范调整大小。

调整UI图形窗口大小。第一列的宽度是第二列的一半,下拉框和列表框的高度没有变化。表格将填充图形窗口的整个垂直空间。

编写代码来管理调整大小行为

当你希望提供网格布局管理器不支持的调整大小行为时,考虑使用万博1manbetxSizeChangedFcn回调。例如,如果你想:

  • 将组件的大小调整到您定义的最小或最大大小。

  • 实现非线性调整大小的行为。

要以这种方式指定调整大小行为,请遵循以下步骤:

  1. 为应用程序中的每个容器编写回调函数,以便在窗口大小改变时管理其子容器的布局。

  2. 设置AutoResizeChildren属性“关闭”

  3. 设置SizeChangedFcn属性设置为适当回调函数的句柄。

的容器中放置每个容器的所有布局代码是一个很好的实践SizeChangedFcn回调以确保最准确的结果。

SizeChangedFcn当发生以下情况之一时执行回调:

  • 容器第一次变得可见。

  • 容器的大小变化时是可见的。

  • 容器在大小改变后第一次变得可见。这种情况发生在容器不可见时大小发生变化,然后容器变得可见。

提示

延迟容器的显示是一种很好的做法,直到所有变量被删除之后SizeChangedFcn定义用途。这种做法可以防止SizeChangedFcn返回错误的回调。若要延迟容器的显示,请设置其可见财产“关闭”.然后,设置可见财产“上”在你定义了变量之后SizeChangedFcn回调使用。

示例:使用可调整大小的应用程序SizeChangedFcn

此示例演示如何创建一个应用程序,该应用程序使用自定义调整大小逻辑来管理按钮组中切换按钮的大小,并修复一组轴的纵横比。创建一个名为sizeChangedApp.m在当前文件夹中,并定义mainsizeChangedApp函数在文件顶部。

编写一个名为createcomponent来创建图形和UI组件,并将UI组件存储在用户数据这个数字。这允许您在图中访问应用程序数据SizeChangedFcn回调函数。有关共享应用程序数据的详细信息,请参见在回调之间共享数据

调用createcomponent函数,然后使图形窗口可见。

函数sizeChangedApp fig = createComponents;fig.Visible =“上”结束%创建UI组件函数图= createComponents图= ufigure (“可见”“关闭”...“AutoResizeChildren”“关闭”...“SizeChangedFcn”, @figResize);BTNGRP = uibuttongroup(图,...“AutoResizeChildren”“关闭”...“SizeChangedFcn”, @bgResize);Btn1 = uitogglebutton(btngrp);Btn2 = uitogglebutton(btngrp);Ax = uiaxes(fig);存储组件fig.UserData = struct(...“ButtonGroup”btngrp,...Button1的btn1,...“Button2”这里,...“轴”、ax);结束

然后,写一个SizeChangedFcn为图形窗口和另一个按钮组调整大小函数。每个函数都管理其直接子函数的大小调整行为。

对于图形窗口,编写一个名为figResize控件的位置和大小ButtonGroup而且对象,当用户调整窗口大小时:

  • 将按钮组定位为跨越图形的整个左半部分。

  • 定位坐标轴以保持方形长宽比,并在图形右半部分的中心位置:

    • 的宽度和高度对象的像素数为axdim.的价值axdim是将图形的右半部分填充到最满的值,允许在每个大小的轴上有10个像素的空间,并且受到轴保持正方形的约束。命令Axdim = max(Axdim,0)确保轴的尺寸永远不会是负的。

    • 设置坐标轴的左边缘,axleft,使坐标轴水平居中于图形的右半部分。

    • 设置轴的底边,axbottom,使轴在图中垂直居中。

函数figResize (src、事件)获取UserData以访问组件data = src.UserData;%获取图形大小figwidth = src.Position(3);战斗8 = src.Position(4);%调整按钮组大小data.ButtonGroup.Position = [1 1 figwidth/2 fight eight];%调整轴的大小Axdim = min(figwidth/2,figheight) - 20;Axdim = max(Axdim,0);Axleft = figwidth/2 + (figwidth/2-axdim)/2;Axbottom = (fight - eight-axdim)/2;data.Axes.Position = [axleft axbottom axdim];结束

对于按钮组,编写一个名为bgResize控件的位置和大小ToggleButton对象。函数时执行此回调ButtonGroup对象更改大小,当用户调整图形窗口大小时发生。控件的大小相对地定位两个切换按钮ButtonGroup对象:

  • 设置每个切换按钮的左边缘和宽度,btnleft而且btnwidth,以便在左右两边的按钮边缘和容器边缘之间留出20个像素的空间。

  • 设置每个切换按钮的高度,btnheight,至按钮组高度的1/6。

  • 设置每个切换按钮的底部,btn1bottom而且btn2bottom,使顶部按钮上方和底部按钮下方的空间为按钮组高度的1/4。

这是应用程序的代码:

函数bgResize (src、事件)获取UserData以访问组件FIG =祖先(src,“图”“最高级的”);data = fig.UserData;获取按钮组大小bgwidth = src.Position(3);bgheight = src.Position(4);%调整按钮组大小Btnleft = 20;Btn1bottom = bgheight/4;Btn2bottom = (7/12)*bgheight;Btnwidth = bgwidth-40;Btnheight = bgheight/6;data.Button1。位置= [btnleft btn1bottom btnwidth btnheight];data.Button2。位置= [btnleft btn2bottom btnwidth btnheight];结束

运行应用程序,然后调整图形窗口的大小。应用程序中的组件相对于图形窗口的大小进行调整。

sizeChangedApp

两个不同大小的图形窗口。UI组件按照窗口大小的比例缩放。

关闭调整特定组件的大小

AutoResizeChildren属性控制应用程序在没有网格布局管理器或SizeChangedFcn回调。每个应用程序容器,如UI图、面板或选项卡,都有一个AutoResizeChildren属性,该属性被设置为“上”默认情况下。当容器有AutoResizeChildren设置为“上”,当应用程序用户调整图形窗口大小时,应用程序会自动调整该容器的子容器的大小。使用此属性可选择性地关闭特定组件的大小调整:

  • 要完全关闭自动调整大小,请设置AutoResizeChildren的主图形窗口“关闭”

  • 若要关闭特定组件的自动调整大小,请将这些组件父化到容器AutoResizeChildren设置为“关闭”

当你改变AutoResizeChildren属性,首先为父容器设置该值,然后为子容器设置该值。

完全关闭应用程序调整大小

调整属性控制应用程序用户是否可以交互地调整窗口大小。的默认值调整“上”.考虑设置调整“关闭”如果一致的窗口大小对应用程序的布局或行为很重要。

另请参阅

|

相关的话题