它根本不能使用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标题和副标题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)