我有一个针对 Android 10.0 的 Xamarin 表单项目。
我正在使用 SyncFusion SfDataGrid 来显示信息。
在 DataGrid 的每一行中,我都有一个输入字段。
我将 DataGrid 封装在一个 ScrollView 中,这样当用户在其中一个输入字段内点击时,键盘不会覆盖屏幕。
问题是当我添加 ScrollView 时,页面加载时间明显更长。当我删除 ScrollView 时它非常活泼但是专注于底部行之一的输入控件会导致键盘覆盖所述行。
为什么添加 ScrollView 会导致这些性能问题?
<Frame Padding="5" VerticalOptions="FillAndExpand" CornerRadius="5" HasShadow="True">
<ScrollView>
<datagrid:SfDataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<datagrid:SfDataGrid.GridStyle>
<datagrid:DefaultStyle GridLinesVisibility="None"/>
</datagrid:SfDataGrid.GridStyle>
<datagrid:SfDataGrid.Columns>
<datagrid:GridTextColumn HeaderText="Desc" MappingName="Description"/>
<datagrid:GridTemplateColumn MappingName="Qty">
<datagrid:GridTemplateColumn.CellTemplate>
<DataTemplate>
<ViewCell>
<Entry Text="{Binding Qty}" Keyboard="Numeric"/>
</ViewCell>
</DataTemplate>
</datagrid:GridTemplateColumn.CellTemplate>
</datagrid:GridTemplateColumn>
</datagrid:SfDataGrid.Columns>
</datagrid:SfDataGrid>
</ScrollView>
</Frame>
问题是您将可滚动视图 (SfDataGrid) 嵌套在 ScrollView 中,这是不鼓励的(参见链接)。
您应该删除 ScrollView 并指定一个 Soft Keyboard Input Mode,例如使用
Pan
或 Resize
值,如果你想确保键盘不会隐藏焦点 Entry
.
将以下内容添加到您的 App.xaml.cs:
<Application
xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
android:Application.WindowSoftInputModeAdjust="Resize">
</Application>
请注意,这仅适用于 Android。