Xamarin Android - 移植 Android Api 26 --> API 28 - 单击时按钮置于最前面

Xamarin Android - Porting Android Api 26 --> API 28 - Button bring to front on click

我们正在将 Xamarin 项目从 Android 8.0 更新到 9.0(API 26 -> API 28)。

我们检测到布局上的不同行为:我们有一个按钮,我们在 StackLayout 中显示标签和图标。

使用旧的Android 8.0 版本,我们可以正确点击按钮。 在新的 Android 9.0 版本中,我们注意到我们可以正确地点击按钮,但是当我们点击按钮时,按钮会被带到前面并隐藏 StackLayout 标签和图标。 当我们 return 到这个屏幕时,按钮仍然在前台并且 StackLayout 标签和图标不再出现。

即使单击按钮,我们如何强制 StackLayout 标签和图标保留在按钮上? 谢谢

    <StackLayout Orientation="Vertical" AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
        <ctrl:TitleBarControl x:Name="titleBar" Title="Menu Trasporto Valori"></ctrl:TitleBarControl>
        <Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Style="{StaticResource standardGrid}">
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <Button x:Name="btnProssimo" Image="MondoConPinPoint_48x48.gif" Text="Prossimo" HorizontalOptions="Fill" VerticalOptions="Fill" Grid.Row="0" Grid.Column="0" Style="{StaticResource menuButton}" Command="{Binding ProssimoCommand}"></Button>
            <StackLayout Orientation="Horizontal" Grid.Row="0" Grid.Column="0" HorizontalOptions="Center" VerticalOptions="End">
                <Label Text="Da eseguire:" HorizontalOptions="Center" VerticalOptions="Center"  Style="{StaticResource lightLabel}"></Label>
                <Label Text="{Binding DaEseguire}" HorizontalOptions="Center" VerticalOptions="Center" Style="{StaticResource boldLabel}"></Label>
            </StackLayout>

            <Button x:Name="btnProssimoI" Image="Cacciavite_48x48.gif" Text="Prossimo I" HorizontalOptions="Fill" VerticalOptions="Fill" Grid.Row="1" Grid.Column="0" Style="{StaticResource menuButton}" Command="{Binding ProssimoICommand}"></Button>
            <StackLayout Orientation="Horizontal" Grid.Row="1" Grid.Column="0" HorizontalOptions="Center" VerticalOptions="End">
                <Label Text="Da eseguire:" HorizontalOptions="Center" VerticalOptions="End" Grid.Row="1" Grid.Column="0" Style="{StaticResource lightLabel}"></Label>
                <Label Text="{Binding IDaEseguire}" HorizontalOptions="End" VerticalOptions="End" Grid.Row="1" Grid.Column="0" Style="{StaticResource boldLabel}"></Label>
                <Image x:Name="imgSveglia" Grid.Row="1" Grid.Column="0" VerticalOptions="End" HorizontalOptions="End" Source="Sveglia_24x24.gif" WidthRequest="26" IsVisible="{Binding IsI}"></Image>
            </StackLayout>


        </Grid>
    </StackLayout>

从 Xamarin.Forms 4.0 开始,所有针对 FormsAppCompatActivity 的应用程序将默认使用快速渲染器。 如果要解决此问题,可以禁用 FastRenderer。参见:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/internals/fast-renderers#backwards-compatibility

global::Xamarin.Forms.Forms.Init(this, savedInstanceState) 调用之前将以下内容添加到您的 MainActivity.OnCreate 中:

global::Xamarin.Forms.Forms.SetFlags("UseLegacyRenderers");

请改用 ImageButton。这应该可以解决您的问题。