AutoScale标签Xamarin

问题描述 投票:0回答:2

我正在开发一个显示RSS源结果的应用程序。我试图在Stacklayout的同一行显示标题和日期。

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

我所期待的:

我希望标题自动缩放以适合与日期相同的行。是否可以为整行设置宽度,然后让两个标签适合行内?

几小时谷歌搜索的其他成果:

以下是我找到的一些链接,但有些链接很旧,不确定它们是否有效。 这个是老Auto Scale Text Size 这个没有工作Auto-scaling label fontsize in Xamarin

我还发现了一对Nuget包,但我认为我不需要这样做。 https://baskren.github.io/Forms9Patch/ https://forums.xamarin.com/discussion/43468/autosize-font-label

xamarin font-size autosize stacklayout
2个回答
1
投票

这是你的需求吗?

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>

如果title太长,你可以setLineBreakMode="TailTruncation"它会在标签到达容器末尾时自动截断。


0
投票

在stacklayout中使用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>

使用此代码,它将适合您。

© www.soinside.com 2019 - 2024. All rights reserved.