Android 上的 VisualElement 提升

在面向 API 21 或更高版本的应用程序上,此 Android 平台特定功能用于控制视觉元素的提升(也称为 Z 顺序)。 视觉元素的提升决定了其绘制顺序,Z 值更高的视觉元素遮挡 Z 值更低的视觉元素。 通过将 VisualElement.Elevation 附加属性设置为 boolean 值在 XAML 中使用它:

<ContentPage ...
             xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
             Title="Elevation">
    <StackLayout>
        <Grid>
            <Button Text="Button Beneath BoxView" />
            <BoxView Color="Red" Opacity="0.2" HeightRequest="50" />
        </Grid>        
        <Grid Margin="0,20,0,0">
            <Button Text="Button Above BoxView - Click Me" android:VisualElement.Elevation="10"/>
            <BoxView Color="Red" Opacity="0.2" HeightRequest="50" />
        </Grid>
    </StackLayout>
</ContentPage>

或者,可以使用 Fluent API 从 C# 使用它:

using Xamarin.Forms.PlatformConfiguration;
using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;
...

public class AndroidElevationPageCS : ContentPage
{
    public AndroidElevationPageCS()
    {
        ...
        var aboveButton = new Button { Text = "Button Above BoxView - Click Me" };
        aboveButton.On<Android>().SetElevation(10);

        Content = new StackLayout
        {
            Children =
            {
                new Grid
                {
                    Children =
                    {
                        new Button { Text = "Button Beneath BoxView" },
                        new BoxView { Color = Color.Red, Opacity = 0.2, HeightRequest = 50 }
                    }
                },
                new Grid
                {
                    Margin = new Thickness(0,20,0,0),
                    Children =
                    {
                        aboveButton,
                        new BoxView { Color = Color.Red, Opacity = 0.2, HeightRequest = 50 }
                    }
                }
            }
        };
    }
}

Button.On<Android> 方法指定此平台特定仅在 Android 上运行。 Xamarin.Forms.PlatformConfiguration.AndroidSpecific 命名空间中的 VisualElement.SetElevation 方法用于将视觉元素的提升设置为可为 null 的 float。 此外,VisualElement.GetElevation 方法还可用于检索视觉元素的提升值。

这样,可以控制视觉元素的提升,从而 Z 值更高的视觉元素遮挡 Z 值更低的视觉元素。 因此在本例中,第二个 ButtonBoxView 上面呈现,因为它具有更高的提升值:

VisualElement 提升屏幕截图