AutoScale Label Xamarin - PullRequest
       38

AutoScale Label Xamarin

0 голосов
/ 12 апреля 2019

Я работаю над приложением, которое отображает результаты из RSS-канала. Я пытаюсь показать заголовок и дату в одной строке разметки.

Код Xaml:

StackLayout>
    <Label Text="60 Second Sports" FontAttributes="Bold" HorizontalOptions="Center"/>
    <ListView x:Name="mainArticleRssList" IsPullToRefreshEnabled="True" Refreshing="ListItems_Refreshing" ItemTapped="RssList_ItemTapped">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout Padding="15,0,15,0">
                        <Label Text="{Binding Title}" 
                               LineBreakMode="WordWrap"
                               MaxLines="2"/>
                        <Label Text="{Binding PublishedDate}" 
                               LineBreakMode="WordWrap"
                               MaxLines="1"/>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <controls:AdMobView />
</StackLayout>

Вот как это выглядит: enter image description here

Что я ожидаю:

Я хочу, чтобы заголовок для автоматического масштабирования помещался в той же строке, что и дата. Можно ли установить ширину для всей строки, а затем разместить две метки внутри строки?


Другие плоды нескольких часов гуглинга:

Вот некоторые ссылки, которые я нашел, но некоторые старые и не уверены, что они работают.
Это старый Размер текста в автоматическом масштабе
Этот не работал Автоматическое масштабирование размера шрифта в Xamarin

Я также нашел пару пакетов Nuget, но я не думаю, что мне нужно это делать. https://baskren.github.io/Forms9Patch/ https://forums.xamarin.com/discussion/43468/autosize-font-label

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Вам нравится этот скриншот?

enter image description here

Вы можете использовать Grid для достижения этой цели.

 <ContentPage.Content>
       <StackLayout>
          <Label Text="Xamarin.Forms native cell" HorizontalTextAlignment="Center" />
           <ListView x:Name="listView" CachingStrategy="RecycleElement" 
        ItemSelected="OnItemSelected">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>

                        <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />

                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="3*" />
                            <ColumnDefinition Width="1*" />
                            </Grid.ColumnDefinitions>

                            <Label Text="{Binding Title}" Grid.Row="0" Grid.Column="0" 
                           LineBreakMode="TailTruncation"
                           MaxLines="2" />
                            <Label Text="{Binding PublishedDate}" Grid.Row="0" Grid.Column="1" 
                           LineBreakMode="WordWrap"
                           MaxLines="1"/>
                        </Grid>
                    </ViewCell>


                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage.Content>

Если заголовок слишком длинный, вы можете установить LineBreakMode="TailTruncation", он будет автоматически обрезаться, когда метка достигнет конца контейнера.

0 голосов
/ 12 апреля 2019

Использование Grid Layout внутри макета стека для достижения этого

<ListView x:Name="mainArticleRssList" IsPullToRefreshEnabled="True" HasUnevenRows="True" Refreshing="ListItems_Refreshing" ItemTapped="RssList_ItemTapped">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout Padding="15,0,15,0">
                     <Grid x:Name="grd">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="7*"/>
                                    <ColumnDefinition Width="3*"/>
                                    </Grid.ColumnDefinitions>
                        <Label Text="{Binding Title}" 
                               LineBreakMode="WordWrap"
                               MaxLines="2"/>
                        <Label Text="{Binding PublishedDate}" Grid.Column="1"
                               LineBreakMode="WordWrap"
                               MaxLines="1"/>
                </Grid>
                    </StackLayout>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Используйте этот код, и он будет работать для вас.

...