Xamarin Android: прокрутка текста автоматического размера в ListView уменьшает размер текста - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть пользовательское средство визуализации меток для автоматического изменения размера текста в одну строку в зависимости от длины текста. Авторазмер работает нормально, но проблема в том, что когда я прокручиваю несколько раз в списке, текст становится меньше.

Я обнаружил, что эта проблема возникает только в том случае, если это длинный список (более 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>
...