Xamarin View如何将TextButton置于Google Map视图前景显示
问题原因
- 原代码外层使用
StackLayout作为根容器,这类布局是纵向流式堆叠逻辑,本身不支持控件层叠显示;给外层设置HeightRequest="1"和BackgroundColor="Aqua"属于无效hack写法,是页面出现多余水绿色背景的直接原因 - Xamarin.Forms.GoogleMaps的Map控件是各平台原生渲染的视图,在普通StackLayout容器下,原生视图的渲染层级默认高于Xamarin.Forms虚拟控件,这也是通用布局方案在地图场景下失效的核心原因,按钮会始终被地图遮挡。
可行实现方案
使用支持层叠逻辑的Grid作为根容器(性能优于AbsoluteLayout,无需写额外坐标参数),同层级子元素会按照XAML中的书写顺序渲染,后添加的元素自动显示在上层,无需设置任何异常高度或背景色:
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="StandApp.Views.MainMapPage" xmlns:maps="clr-namespace:Xamarin.Forms.GoogleMaps;assembly=Xamarin.Forms.GoogleMaps" Title="MapsPage1"> <ContentPage.Content> <!-- Grid默认占满页面全部可用空间,支持子元素层叠 --> <Grid> <!-- 底层:地图控件,占满整个页面 --> <maps:Map x:Name="map" MyLocationEnabled="True" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"/> <!-- 上层:登录按钮容器,默认覆盖在地图上方 --> <StackLayout Padding="10,10,10,10" VerticalOptions="End"> <Button VerticalOptions="Center" Text="Login" /> </StackLayout> </Grid> </ContentPage.Content> </ContentPage>
适配注意事项
- 调整按钮位置只需修改上层
StackLayout的布局属性即可:比如需要放在右下角就设置VerticalOptions="End" HorizontalOptions="End",放在顶部就设置VerticalOptions="Start" - 根容器无需设置固定高度、自定义背景色,页面不会出现多余的水绿色块
- 如果Android平台偶发控件点击异常,给按钮控件设置
InputTransparent="False"即可保证点击事件正常响应,不需要修改平台渲染器代码。
内容的提问来源于stack exchange,提问作者Jaroxa
相关产品推荐
相关产品推荐

