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
。这应该可以解决您的问题。
我们正在将 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
。这应该可以解决您的问题。