Xamarin.Forms:显示ToolbarItems时,如何在TitleView中居中放置图像?

如何解决Xamarin.Forms:显示ToolbarItems时,如何在TitleView中居中放置图像?

我正在使用包含 4个标签 Xamarin.Forms.Shell应用。我想在所有这些页面显示一个常见 \documentclass{article} \usepackage[utf8]{inputenc} %\usepackage[utf8]{inputenc} \usepackage{graphicx} \usepackage{amsmath,amsfonts,amssymb} \usepackage{xcolor} %\usepackage{url} \usepackage[margin=1.0in]{geometry} \usepackage{algorithm} \usepackage[noend]{algpseudocode} \usepackage{comment} \usepackage{ifthen} \usepackage{placeins} \usepackage{authblk} \usepackage{afterpage} \usepackage{amsthm} \usepackage{soul} \usepackage[english]{babel} %\usepackage{xcolor} \graphicspath{ {./images/} } \newtheorem*{remark}{\textbf{Remark}} \usepackage{subcaption} \usepackage{textgreek} \usepackage[font={it}]{caption} \usepackage{titlesec} \usepackage{titling} \usepackage{pgffor} \usepackage{hyperref} \date{November 2020} \begin{document} \section{Introduction} In the IMAGES folder i loaded images from epoch 1218 batch 200 to epoch 1220 batch 0 \begingroup \raggedright% \foreach \epoche in {998,...,1000}{% \foreach \batch in {0,100,400}{% \foreach \x in {1,10}{% \includegraphics[width=20mm]{IMAGES/fake_image_MPI_rank_0_Epoch_\epoche _Batch_\batch_N_image_\x }\hspace{0pt}% }}} \captionof{table}{Bla Bla bla} \label{somekey} \endgroup \clearpage \begingroup \raggedright% \foreach \epoche in {1219,1219}{% \foreach \batch in {0,10}{% \fBox{\includegraphics[width=20mm]{IMAGES/fake_image_MPI_rank_0_Epoch_\epoche _Batch_\batch_N_image_\x }}\hspace{0pt}% }}} \captionof{table}{Bla Bla bla} \label{somekeyy} \endgroup \end{document} ,其中包含一个居中的SVG徽标

为此,我可以这样使用Title

TitleView

这可行,徽标在<Shell.TitleView> <ffimageloadingsvg:SvgCachedImage Source="resource://ShellAppSample.Resources.logoTitle.svg" DownsampleHeight="6" HeightRequest="45"/> </Shell.TitleView> 中居中。但是,如果页面包含NavigationBar,则徽标将不再居中。

例如,在页面我有一个toolbaritems,如下所示:

ToolBarItem

是否有另一种方法可以通过使用<ContentPage.toolbaritems> <ToolbarItem Text="Refresh" Order="Primary" Priority="0" Command="{Binding RefreshCommand}" CommandParameter="{x:Reference webView}"> <ToolbarItem.IconImageSource> <FontimageSource Glyph="{StaticResource FalIconRefresh}" FontFamily="FontAwesomeLight" Size="Medium"/> </ToolbarItem.IconImageSource> </ToolbarItem> </ContentPage.toolbaritems> 或计算Customrenderer的大小来显示来自SVG的居中图像作为标题

我发现1年前已经发布了similar question,但没有任何解决方案...

我已经尝试过像这样在toolbaritems中重绘ToolbarItem

TitleView

在iOS上是正确的,但是我可以看到:

  • 徽标不完全居中,就像在不包含任何<Shell.TitleView> <Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Transparent"> <ffimageloadingsvg:SvgCachedImage Source="resource://ShellAppSample.Resources.blacklogoTitle.svg" DownsampleHeight="6" HorizontalOptions="CenterandExpand" HeightRequest="45" BackgroundColor="Transparent"/> <Image HorizontalOptions="End" VerticalOptions="CenterandExpand" BackgroundColor="Transparent"> <Image.source> <FontimageSource Glyph="{StaticResource FalIconRefresh}" FontFamily="FontAwesomeLight" Size="Medium"/> </Image.source> <Image.GestureRecognizers> <TapGestureRecognizer Command="{Binding RefreshCommand}" CommandParameter="{x:Reference webView}"/> </Image.GestureRecognizers> </Image> </Grid> </Shell.TitleView> 页面上一样,因为当我在页面之间切换时,间隙很小
  • 图标的位置未定位,就像我使用ToolBarItem
  • 时一样

在Android上,结果不正确:徽标的高度不同,并且图标不在ToolBarItem之外。

解决方法

最后,我已经这样管理TitleView

对于Image

<Shell.TitleView >
    <Image Source="resource://ShellAppSample.Resources.logo.jpg"
          VerticalOptions="CenterAndExpand" HorizontalOptions="Center"
          Margin="{OnPlatform Android='0,16,0',Default=0}"/>
</Shell.TitleView>

对于Label

<Shell.TitleView>
    <Label Text="{Binding Title}"
           VerticalOptions="CenterAndExpand" HorizontalOptions="Center"
           Margin="{OnPlatform Android='0,Default=0}"/>
</Shell.TitleView>

对于Label,其大小为ToolBarItem的一个“中”:

<Shell.TitleView>
    <Grid HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="40" /> 
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <Label Text="{Binding Title}"
               Grid.Column="1"
               VerticalOptions="CenterAndExpand" HorizontalOptions="Center"
               Margin="{OnPlatform Android='0,Default=0}"/>
    </Grid>
</Shell.TitleView>
<ContentPage.ToolbarItems>
    <ToolbarItem Text="Refresh"
                 Order="Primary"
                 Priority="1"
                 Command="{Binding RefreshCommand}">                             
        <ToolbarItem.IconImageSource>
            <FontImageSource Glyph="{StaticResource FalIconRefresh}"
                             FontFamily="FontAwesomeLight"
                             Size="Medium"/>
        </ToolbarItem.IconImageSource>
    </ToolbarItem>
</ContentPage.ToolbarItems>

我已经通过DebugRainbows软件包检查了对齐方式,在iOS / Android上,在小型/大型设备上,它看起来都不错。

这并不完美,如果我添加其他ToolBarItem,则需要更新规则,但是它的工作原理是这样的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?