如何使用 xamarin 表单将工具栏标题文本对齐到左侧
how to align toolbar title text to left side using xamarian forms
我刚刚用谷歌搜索 post 但没有找到有用的文章。我有一个具有服务模块的 SmartEntry 应用程序。其中一个第一个仪表板页面有导航按钮,最后 header 行是标题 + 图像按钮。
看看
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="SmartEntry.DashBoard"
Title="Dashboard"
BackgroundColor="White">
<ContentPage.ToolbarItems>
<ToolbarItem Text="Dashboard" Order="Primary" Priority="0"></ToolbarItem>
<ToolbarItem Icon="logout_icon.png" Order="Primary" Priority="1" Clicked="ToolbarItem_Clicked"/>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<StackLayout>
<Frame BackgroundColor="White" HasShadow="False">
<StackLayout Orientation="Vertical" Spacing="10" WidthRequest="100">
......
现在我只想让这个仪表板标题左对齐我是如何实现的。
屏幕:
如何让 DASHBOARD 左对齐....
如上所述,您可以使用 titleview,也可以为 NavigationPage 而不是 Page 创建自定义渲染器,并覆盖 OnLayout 方法。
相关文档:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/
Android会在UpdateToolbar方法中把默认的图标改回来,每次改变当前页面都会触发OnLayout方法。
在 Android:
[assembly: ExportRenderer(typeof(NavigationPage), typeof(MyNavigationRenderer))]
namespace FormsApp.Droid
{
public class MyNavigationRenderer : NavigationPageRenderer
{
Context _context;
AndroidX.AppCompat.Widget.Toolbar _toolbar;
public MyNavigationRenderer(Context context) : base(context)
{
_context = context;
}
public override void OnViewAdded(Android.Views.View child)
{
base.OnViewAdded(child);
if (child.GetType() == typeof(AndroidX.AppCompat.Widget.Toolbar))
{
_toolbar = (AndroidX.AppCompat.Widget.Toolbar)child;
_toolbar.SetNavigationIcon(Resource.Drawable.bbutton_nav);
}
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
if (_toolbar != null)
{
if (_toolbar.NavigationIcon != null)
{
_toolbar.NavigationIcon = AndroidX.Core.Content.ContextCompat.GetDrawable(_context, Resource.Drawable.bbutton_nav);
}
}
}
}
}
在 Ios:
[assembly: ExportRenderer(typeof(NavigationPage), typeof(MyRenderer))]
namespace FormsApp.iOS
{
class MyRenderer : NavigationRenderer
{
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
if (this.NavigationBar.TopItem.BackBarButtonItem == null)
{
this.NavigationBar.BackIndicatorImage = UIImage.FromFile("pic.png");
this.NavigationBar.BackIndicatorTransitionMaskImage = UIImage.FromFile("pic.png");
this.NavigationBar.TopItem.BackBarButtonItem = new UIBarButtonItem("Dashboard", UIBarButtonItemStyle.Plain, null);
}
}
}
}
我刚刚用谷歌搜索 post 但没有找到有用的文章。我有一个具有服务模块的 SmartEntry 应用程序。其中一个第一个仪表板页面有导航按钮,最后 header 行是标题 + 图像按钮。
看看
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="SmartEntry.DashBoard"
Title="Dashboard"
BackgroundColor="White">
<ContentPage.ToolbarItems>
<ToolbarItem Text="Dashboard" Order="Primary" Priority="0"></ToolbarItem>
<ToolbarItem Icon="logout_icon.png" Order="Primary" Priority="1" Clicked="ToolbarItem_Clicked"/>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<StackLayout>
<Frame BackgroundColor="White" HasShadow="False">
<StackLayout Orientation="Vertical" Spacing="10" WidthRequest="100">
......
现在我只想让这个仪表板标题左对齐我是如何实现的。 屏幕:
如何让 DASHBOARD 左对齐....
如上所述,您可以使用 titleview,也可以为 NavigationPage 而不是 Page 创建自定义渲染器,并覆盖 OnLayout 方法。 相关文档:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/
Android会在UpdateToolbar方法中把默认的图标改回来,每次改变当前页面都会触发OnLayout方法。
在 Android:
[assembly: ExportRenderer(typeof(NavigationPage), typeof(MyNavigationRenderer))]
namespace FormsApp.Droid
{
public class MyNavigationRenderer : NavigationPageRenderer
{
Context _context;
AndroidX.AppCompat.Widget.Toolbar _toolbar;
public MyNavigationRenderer(Context context) : base(context)
{
_context = context;
}
public override void OnViewAdded(Android.Views.View child)
{
base.OnViewAdded(child);
if (child.GetType() == typeof(AndroidX.AppCompat.Widget.Toolbar))
{
_toolbar = (AndroidX.AppCompat.Widget.Toolbar)child;
_toolbar.SetNavigationIcon(Resource.Drawable.bbutton_nav);
}
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
if (_toolbar != null)
{
if (_toolbar.NavigationIcon != null)
{
_toolbar.NavigationIcon = AndroidX.Core.Content.ContextCompat.GetDrawable(_context, Resource.Drawable.bbutton_nav);
}
}
}
}
}
在 Ios:
[assembly: ExportRenderer(typeof(NavigationPage), typeof(MyRenderer))]
namespace FormsApp.iOS
{
class MyRenderer : NavigationRenderer
{
public override void ViewDidLayoutSubviews()
{
base.ViewDidLayoutSubviews();
if (this.NavigationBar.TopItem.BackBarButtonItem == null)
{
this.NavigationBar.BackIndicatorImage = UIImage.FromFile("pic.png");
this.NavigationBar.BackIndicatorTransitionMaskImage = UIImage.FromFile("pic.png");
this.NavigationBar.TopItem.BackBarButtonItem = new UIBarButtonItem("Dashboard", UIBarButtonItemStyle.Plain, null);
}
}
}
}