Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5024331
  • 博文数量: 891
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8636
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(891)

文章存档

2020年(8)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Android平台

2019-11-06 09:46:10

网格中的对齐
“高度”属性为“自动”的网格行以与垂直StackLayout相同的方式约束该行中元素的高度。 类似地,宽度为Auto的列的工作方式与水平StackLayout非常相似。
正如您在本章前面所见,您可以设置Grid子项的HorizontalOptions和VerticalOptions属性,以将它们放置在单元格中。 这是一个名为GridAlignment的程序,它创建一个包含九个相等大小单元格的Grid,然后将六个Label元素全部放在中心单元格中,但具有不同的对齐设置:

点击(此处)折叠或打开

  1. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
  2.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  3.              x:Class="GridAlignment.GridAlignmentPage">
  4.  
  5.     <Grid>
  6.         <Grid.RowDefinitions>
  7.             <RowDefinition Height="*" />
  8.             <RowDefinition Height="*" />
  9.             <RowDefinition Height="*" />
  10.         </Grid.RowDefinitions>
  11.         <Grid.ColumnDefinitions>
  12.             <ColumnDefinition Width="*" />
  13.             <ColumnDefinition Width="*" />
  14.             <ColumnDefinition Width="*" />
  15.         </Grid.ColumnDefinitions>
  16.         <Label Text="Upper Left"
  17.                Grid.Row="1" Grid.Column="1"
  18.                VerticalOptions="Start"
  19.                HorizontalOptions="Start" />
  20.  
  21.         <Label Text="Upper Right"
  22.                Grid.Row="1" Grid.Column="1"
  23.                VerticalOptions="Start"
  24.                HorizontalOptions="End" />
  25.  
  26.         <Label Text="Center Left"
  27.                Grid.Row="1" Grid.Column="1"
  28.                VerticalOptions="Center"
  29.                HorizontalOptions="Start" />
  30.  
  31.         <Label Text="Center Right"
  32.                Grid.Row="1" Grid.Column="1"
  33.                VerticalOptions="Center"
  34.                HorizontalOptions="End" />
  35.  
  36.         <Label Text="Lower Left"
  37.                Grid.Row="1" Grid.Column="1"
  38.                VerticalOptions="End"
  39.                HorizontalOptions="Start" />
  40.  
  41.         <Label Text="Lower Right"
  42.                Grid.Row="1" Grid.Column="1"
  43.                VerticalOptions="End"
  44.                HorizontalOptions="End" />
  45.     </Grid>
  46. </ContentPage>

如您所见,一些文本重叠:

2018_10_03_193751
但是,如果您将手机侧向转动,则单元格会调整大小并且文本不会重叠:
2018_10_03_193856
虽然可以在Grid的子项上使用HorizontalOptions和VerticalOptions来设置子项的对齐方式,但不能使用Expands标志。严格地说,您实际上可以使用Expands标志,但它对Grid的子节点没有影响。 Expands标志仅影响StackLayout的子级。
通常,您已经看到为StackLayout的子项使用Expands标志的程序为布局中的环绕元素提供了额外的空间。例如,如果StackLayout的两个Label子项都将其VerticalOptions属性设置为CenterAndExpand,则所有额外空间将在为这些子项分配的StackLayout中的两个插槽之间平均分配。
在网格中,您可以通过使用“*”(星号)规范大小的单元格以及子项上的HorizontalOptions和VerticalOptions设置来执行类似的布局技巧。您甚至可以为间距目的创建空行或空列。
SpacingButtons程序同样包含三个垂直按钮和三个水平按钮。前三个按钮占据占据页面大部分的三行网格,三个水平按钮位于页面底部的三列网格中。这两个网格位于StackLayout中:

点击(此处)折叠或打开

  1. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
  2.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
  3.              x:Class="SpacingButtons.SpacingButtonsPage">
  4.     <StackLayout>
  5.         <Grid VerticalOptions="FillAndExpand">
  6.             <Grid.RowDefinitions>
  7.                 <RowDefinition Height="*" />
  8.                 <RowDefinition Height="*" />
  9.                 <RowDefinition Height="*" />
  10.             </Grid.RowDefinitions>
  11.             <Button Text="Button 1"
  12.                     Grid.Row="0"
  13.                     VerticalOptions="Center"
  14.                     HorizontalOptions="Center" />
  15.  
  16.             <Button Text="Button 2"
  17.                     Grid.Row="1"
  18.                     VerticalOptions="Center"
  19.                     HorizontalOptions="Center" />
  20.             <Button Text="Button 3"
  21.                     Grid.Row="2"
  22.                     VerticalOptions="Center"
  23.                     HorizontalOptions="Center" />
  24.         </Grid>
  25.         <Grid>
  26.             <Grid.ColumnDefinitions>
  27.                 <ColumnDefinition Width="*" />
  28.                 <ColumnDefinition Width="*" />
  29.                 <ColumnDefinition Width="*" />
  30.             </Grid.ColumnDefinitions>
  31.             <Button Text="Button 4"
  32.                     Grid.Column="0"
  33.                     HorizontalOptions="Center" />
  34.             <Button Text="Button 5"
  35.                     Grid.Column="1"
  36.                     HorizontalOptions="Center" />
  37.             <Button Text="Button 6"
  38.                     Grid.Column="2"
  39.                     HorizontalOptions="Center" />
  40.         </Grid>
  41.     </StackLayout>
  42. </ContentPage>

第二个Grid的默认VerticalOptions值为Fill,而第一个Grid具有VerticalOptions到FillAndExpand的显式设置。 这意味着第一个Grid将占据屏幕未被第二个Grid占用的所有区域。 第一个Grid的三个RowDefinition对象将该区域划分为三个。 在每个单元格内,Button是水平和垂直居中的:
2018_10_03_194533
第二个Grid将其区域划分为三个等间距列,每个Button在该区域内水平居中。
尽管LayoutOptions的Expands标志可以帮助在StackLayout中平均间隔视觉对象,但是当视觉对象不是统一大小时,该技术会崩溃。 Expands选项在StackLayout的所有插槽中平均分配剩余空间,但每个插槽的总大小取决于各个可视对象的大小。 但是,Grid会为单元格平均分配空间,然后可视对象在该空间内对齐。

阅读(130) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~