Xamarin.Forms自定义Android NavigationPageRenderer标题和副标题

Xamarin.Forms自定义Android NavigationPageRenderer标题和副标题,第1张

概述目前正在开发一个我想使用AppCompat的项目,并且在大多数页面上都要求设置标题副标题. 它根本不能使用AppCompat – 既不设置属性也不使用自定义视图. 不使用AppCompat时,两者都按预期工作.完整的源代码可用here所以如果你好奇的话就运行应用程序:) using System.ComponentModel;using Android.App;using Android.W 目前正在开发一个我想使用AppCompat的项目,并且在大多数页面上都要求设置标题和副标题.

它根本不能使用AppCompat – 既不设置属性也不使用自定义视图.

不使用AppCompat时,两者都按预期工作.完整的源代码可用here所以如果你好奇的话就运行应用程序:)

using System.ComponentModel;using AndroID.App;using AndroID.Widget;using App1.DroID.Renderers;using Xamarin.Forms;using Xamarin.Forms.Platform.AndroID;#if __APPCOMPAT__using NavigationRenderer = Xamarin.Forms.Platform.AndroID.AppCompat.NavigationPageRenderer;#elseusing NavigationRenderer = Xamarin.Forms.Platform.AndroID.NavigationRenderer;#endif[assembly: ExportRenderer(typeof(NavigationPage),typeof(NavigationPageRenderer))]namespace App1.DroID.Renderers{    public class NavigationPageRenderer : NavigationRenderer    {        protected overrIDe voID OnElementChanged(ElementChangedEventArgs<NavigationPage> e)        {            base.OnElementChanged(e);            SetCustomVIEw(e.NewElement.CurrentPage.GetType().name);        }        private voID SetCustomVIEw(string vIEw)        {            var activity = (Activity)Context;#if __APPCOMPAT__            var actionbar = ((FormsAppCompatActivity)Context).SupportActionbar;#else            var actionbar = activity.Actionbar;#endif            actionbar.Title = vIEw;            actionbar.SubTitle = " -> " + vIEw;            var abv = new linearLayout(activity)            {                OrIEntation = OrIEntation.Vertical            };            var main = new TextVIEw(activity)            {                Text = vIEw,};            main.SetTextcolor(color.Aqua.ToAndroID());            main.Setpadding(4,4,2,6);            abv.AddVIEw(main);            abv.AddVIEw(new TextVIEw(activity)            {                Text = " -> " + vIEw            });            actionbar.SetdisplayShowCustomEnabled(true);            actionbar.CustomVIEw = abv;        }        protected overrIDe voID OnElementPropertyChanged(object sender,PropertyChangedEventArgs e)        {            base.OnElementPropertyChanged(sender,e);            if (e.Propertyname.Equals("CurrentPage"))            {                SetCustomVIEw(((NavigationPage)sender).CurrentPage.GetType().name);            }        }    }}

编辑:谢谢@jimmgarr.稍微改变代码以保持AppCompbat和“正常模式”之间的交替.该代码可用于here

解决方法 所以它看起来像NavigationPage uses its own Toolbar instance.这就是为什么在SupportActionbar上设置属性没有做任何事情.

我能够通过覆盖OnVIEwAdded()来获得它的工作,以便在添加时获得对新工具栏的引用:

public overrIDe voID OnVIEwAdded(AndroID.VIEws.VIEw child){    base.OnVIEwAdded(child);    if (child.GetType() == typeof(Support.Toolbar))        toolbar = (Support.Toolbar)child; }

然后使用SetCustomVIEw()内部的引用来设置SubTitle,因为Title已经自动设置.

Here’s the complete renderer class 总结

以上是内存溢出为你收集整理的Xamarin.Forms自定义Android NavigationPageRenderer标题和副标题全部内容,希望文章能够帮你解决Xamarin.Forms自定义Android NavigationPageRenderer标题和副标题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1130585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存