У меня есть пользовательское средство визуализации меток для автоматического изменения размера текста в одну строку в зависимости от длины текста. Авторазмер работает нормально, но проблема в том, что когда я прокручиваю несколько раз в списке, текст становится меньше.
Я обнаружил, что эта проблема возникает только в том случае, если это длинный список (более 25 элементов) и каждый ярлык элемента имеет разную длину текста. Если длинный список с одинаковой длиной текста для каждой метки элемента, прокрутка текста автоматически изменяет размер текста.
Интересно, кто-нибудь мог бы дать мне какой-нибудь совет. Огромное спасибо.
Рендерер пользовательских меток для автоматического изменения размера текста:
[assembly: ExportRenderer(typeof(CustomLabel), typeof(CustomLabelRenderer))]
namespace WhiteLabel.Mobile.App.Droid.Renderers
{
public class CustomLabelRenderer : LabelRenderer
{
public CustomLabelRenderer(Android.Content.Context ctx) : base(ctx)
{
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (Control != null)
{
TextViewCompat.SetAutoSizeTextTypeUniformWithConfiguration(Control, 15, 50, 1, TypedValue.DensityDefault);
Control.SetLines(1);
}
}
}
}
Код XAML:
<ListView
ItemsSource="{Binding Asset}"
SelectedItem="{Binding SelectedItem}"
ItemSelected="OnItemSelected"
SeparatorColor="Transparent"
HasUnevenRows="True"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
BackgroundColor="White"
Footer="">
<ListView.ItemTemplate>
<DataTemplate>
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="1.3*"/>
</Grid.ColumnDefinitions>
<!-- Some Label Here -->
<!-- ...... -->
<customControls:CustomLabel
Text="{Binding Price}"
Grid.Row="1"
Grid.Column="1"
HorizontalOptions="EndAndExpand"
HorizontalTextAlignment="End" />
<!-- Some Label Here -->
<!-- ...... -->
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>